mysql有多张表如何快速复制表并把数据挪过去?

比如说现在 A 数据库有100张表、我要用到的有30张 命令:show tables like "tbl_first%"
可以查询出我这30张表开头是以tbl_first起的,那么我现在想把这30张都复制一下,并把他们的表名修改成 tbl_second 这样的格式 ,最后这个A库里面的数据应该有130条,其中30条以前不动的表 开头是tbl_first, 又多增加了30张开头是 tbl_second ,这个不光是直接复制表过去,原来表里面的信息也要过去。 开始用create table 新表名 select * from 旧表名, 更改一张执行一次, 太慢了,有没有别的方法,听说用循环,但我不太理解到底是怎么使用,回答的最好用sql语句就按上面的这个举例 写个例子
用php写吧

第1个回答  2012-02-21
你指的是在A库中重建copy以tbl_first 开始的表,然后 在A库中黏贴并改名为tbl_second?
如果是这样,我这边提供个方法:命令如下
mysql -u root -paidengshan --database information_schema --execute=" select concat('create table tbl_second',substring(table_name,10),' as select * from ',table_name,';') from tables where table_name like 'tbl_first%' and table_schema ='A库的名字' " > d:\tt.txt
其中 数据库密码要改一下,table_schema改成A库的名字,如果执行正确的话,会在 d下生成一个tt.txt文件,内容就是生成的create table as select *。。的语句,不要复制第一行,下面几行都复制了,然后黏贴到mysql里面执行就可以了追问

要是按这样执行的话,应该有问题,我先问一下,1、 --database information_schema --execute 这句是特定写的吧,我不用修改? 2、 'create table tbl_second',substring(table_name,10),' as select * from ',table_name,';') from tables where table_name like 'tbl_first%' and table_schema ='A库的名字' " > d:\tt.txt 这段里的tbl_second新表后面还有具体的名字的,好比 tbl_second_user \tbl_second_product 等

追答

问题1:不用改
问题2:substring(table_name,10),这个 函数就是把tbl_first后面的字符取到,如 tbl_first_aaa然后会对应新建tbl_second_aaa,这样行不行

追问

对 我就是想要你最后一句话的内容、 其实我一直没有搞明白你后面写的那几个表名、直接用tables概括了,能否给个解释。 旧表开头的格式都是tbl_stat_ovi_*** 新表开头格式 tbl_stat_wp_***

追答

这个tables 也是个表名 他存放表信息,show create table也是查了这个表才得到信息的 ,information_schema 库相当于一个数据字典,表信息,权限,视图、索引都在里面,你有兴趣可以看看tables的结构。

我给你的mysql命令,我已经测试过了,可行,生成对应文件,然后你把tbl_first替换成tbl_stat_ovi_,tbl_second替换成tbl_stat_wp_即可执行了,

遇到问题继续追问

本回答被网友采纳
第2个回答  2012-03-03
用create table A as select * from B 的类似语句编写就可以复制一个表的内容
第3个回答  2012-02-21
我也向学学
相似回答