遇到需要拷贝一个表及其数据的情况,总结了一下几种方法
1.使用 show create table 旧表
将结果拷贝出来,将旧表名换成新表名即可.
注意:该方法仅适用于拷贝表结构,不需要同步数据的情况
show create table 旧表名
2.create table 新表 like 旧表
该语句将完全拷贝旧表结构,
如果需要同步数据,只需执行 insert…
create table 新表 like 旧表;
insert into 新表 select * from 旧表;
3.create table 新表 select * from 旧表;
该语句创建了一个字段和原表一样的新表,并且将数据页同步了过来,
但是丢失了原表的自增和主键等属性,如有需要,可手动添加
create table 新表 select * from 旧表;
# 添加主键:
alter table 新表 add primary key (主键字段);
#添加自增:
alter table 新表 modify column 主键字段 int auto_increment;
# 添加主键和自增:
alter table 新表 change 主键字段 主键字段 int primary key auto_increment;
拓展:
在测试新表数据插入的时候,发现了一些关于自增的误解,也在这里记录一下
因为之前用的sql server,总是有一些固定思维,关于mysql的自增就有一些误解:
在sql server中,有设置过自增键的表时没有办法直接插入显示值,直接插入会报一下错误:不能为表 ‘table’ 中的标识列插入显式值。但是可以通过 set identity_insert实现,如
set identity_insert 表名 on
insert into 表名(列名1,列名2,列名3,列名4) values (数据1,数据2,数据3,数据4)
set identity_insert 表名 off
而在mysql中,是可以直接将显示值插入的,只要该值不和表中的现有自增重复,
如果不设置自增或者用null或0的话,生成的自增值是表中当前最大值加1,
eg现在我有一张表目前最大的自增id是16;
1.手动插入id是21的数据,插入成功,
2.不指定id在插入一条数据’测试22’,插入成功,自增id为22
3.手动增加id为17的数据’测试17’,添加成功
4.不指定id在插入一条数据’测试’,自增id为23
结果如图: