mysql有多张表如何快速复制表并把数据挪过去?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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写吧
如果是这样,我这边提供个方法:命令如下
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_即可执行了,
遇到问题继续追问
MySQL 临时表复制表元数据
MySQL 临时表、复制表、元数据
–
MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。
– 临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间
– TEMPORAR暂时
CREATE TEMPORARY TABLE SalesSummary (
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
– 查询表
select * from SalesSummary;
– 查看表结构
show COLUMNs FROM SalesSummary;
– 向临时表添加数据
INSERT INTO SalesSummary(product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber', 100.25, 90, 2);
INSERT INTO SalesSummary(product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber01', 90.25, 89, 2);
– 删除临时表
DROP TABLE SalesSummary;
– 当你使用 SHOW TABLES命令显示数据表列表时,你将无法看到 SalesSummary表
show tables
– 在MySQL命令控制台上也查询不到 select * from SalesSummary;
– 用查询直接创建临时表的方式: TEMPORARY(temporary暂时的)
CREATE TEMPORARY TABLE 临时表名 AS
(
SELECT * FROM 旧的表名
LIMIT 0,10000
);
– 复制表
需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用CREATE TABLE … SELECT 命令,是无法实现的
– 使用 SHOW CREATE TABLE 命令获取创建数据表(CREATE TABLE) 语句,该语句包含了原数据表的结构,索引等。
– 复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
– 如果你想复制表的内容,你就可以使用 INSERT INTO … SELECT 语句来实现。
CREATE TABLE runoob_tbl (
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
INSERT INTO runoob_tbl (product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber', 100.25, 90, 2);
INSERT INTO runoob_tbl (product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber01', 90.25, 89, 2);
select * FROM runoob_tbl;
SHOW CREATE TABLE runoob_tbl;
create table clone_tbl(
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
)CHARSET=utf8;
INSERT INTO clone_tbl (product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber', 100.25, 90, 2);
INSERT INTO clone_tbl (product_name, total_sales, avg_unit_price, total_units_sold) VALUES('cucumber01', 90.25, 89, 2);
– 查看表数据
select * from clone_tbl;
– 拷贝数据表的数据你可以使用 INSERT INTO… SELECT 语句来实现
INSERT INTO (复制表的表名)table_name (cloumn_name)
select cloumn_name
from (被复制表的表名)table_name;
INSERT INTO clone_tbl (product_name, total_sales, avg_unit_price, total_units_sold)
SELECT product_name, total_sales, avg_unit_price, total_units_sold
FROM runoob_tbl;
– 完整的复制表的内容,包括表结构及表数据
– 表结构 复制表和原表结构一样
show COLUMNS from clone_tbl;
show COLUMNS from runoob_tbl;
– 第一、只复制表结构到新表
create table 新表 select * from 旧表 where 1=2
– OR
– create table 新表 like 旧表
– 第二、复制表结构及数据到新表 – -- create table新表 select * from 旧表
– MySQL 元数据 – MySQL以下三种信息:
– -- 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数。
– 数据库和数据表的信息: 包含了数据库及数据表的结构信息。
– MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。
– SELECT VERSION( );
服务器版本信息
– SELECT DATABASE( )
; 当前数据库名 (或者返回空)
– SELECT USER( );
当前用户名
– SHOW STATUS;
服务器状态
– SHOW VARIABLES;
服务器配置变量
以上是关于mysql有多张表如何快速复制表并把数据挪过去?的主要内容,如果未能解决你的问题,请参考以下文章
Windows环境下Mysql如何快速导入或恢复表为innodb的数据