1、复制表结构、数据
方式1:
create table 新表 as select * from 旧表;
这种方法会将 旧表 中所有的内容都拷贝过来,包括表结构、数据。
缺点:新表中没有了旧表的primary key、Extra(auto_increment)等属性。需要自己用"alter"添加。
方式2:
-- 复制表结构,包含主键、索引
create table 新表 like 旧表。
-- 将原表数据插入新表
insert into 新表 select * from 旧表;
数据恢复:
rename table 旧表 to 新表;
2、只复制表结构
方法一:
create table 新表 select * from 旧表 where 1=0;
缺点:新表中没有了旧表的primary key、Extra(auto_increment)等属性。
方法二:
create table 新表 like 旧表。 -- 包含主键、索引
方法三:
show create table 旧表;
这样会将旧表的创建命令列出。我们只需要将该命令拷贝出来,更改table的名字,就可以建立一个完全一样的表。方法三;
set @target_tname = '旧表';
set @month=date_format(now(),'%Y%m');
set @sql_create_table = concat('create table if not exists ',@target_tname,'_',@month,' like ',@target_tname);
prepare sql_create_table from @sql_create_table;
execute sql_create_table;
原理:create table if not exists test like game_center_download_data;
3、只复制表数据:
如果两个表结构一样:
insert into 新表 select * from 旧表;
如果两个表结构不一样:
insert into 新表(column1,column2...) select column1,column2... from 旧表;
4、SELECT INTO OUTFILE导出
-
SELECT * INTO OUTFILE 'temp.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
FROM table_name
WHERE createtime < 1382716800;
5、LOAD DATA 导入
LOAD DATA INFILE '/home/temp.txt' INTO TABLE table_name FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'(product_id,uuid,mac,monitor,win_version,ip,createtime) ;
注: 从本地导入远程服务器需使用LOAD DATA LOCAL INFILE
6、备份整张表数据
-- 备份原表(同时也清空了表数据,因为原表名已不存在)
RENAME TABLE cust_belong TO cust_belong_20220920;
-- 清空新表(只恢复原表结构)
create table cust_belong like cust_belong_20220920;
恢复原数据:
只需要将 备份表cust_belong_20220920的表名改为cust_belong即可。