MySQL复制表(三种)
#1、复制表数据和列名至一个新表,(不包含索引),新表必须不存在 DROP TABLE IF EXISTS same2; CREATE TABLE same2 AS (SELECT * FROM same); #2、仅复制表列至新表,不包含数据和索引,新表必须不存在 CREATE TABLE same4 AS SELECT * FROM same WHERE 1=2; ################################################################## #步骤3加4才能完整地备份一个表,包括表列、数据、索引 #3、仅复制表结构,新表必须不存在 DROP TABLE IF EXISTS same3; CREATE TABLE same3 LIKE same; #4、表必须已存在,仅复制表数据,可以选择复制某几列 INSERT INTO same3 SELECT * FROM same; INSERT INTO same3(n) SELECT n FROM same; #创建一个新表,id1为 middleint ,name为long SELECT * INTO same5 FROM same DROP TABLE same5; CREATE TABLE same5( id1 MIDDLEINT PRIMARY KEY, NAME LONG ); #将same表中的id=1的数据插入same5 INSERT INTO same5(id1,NAME) SELECT id,n FROM same WHERE id =1;
总结
create 开头的是创建,新表必须不存在
create table as 只能存视图数据,没有索引,跟视图规则一样,select后限制列属性,where限制满足条件的行数据
create table like 只复制表结构,包括列名,索引
insert开头的是插入,新表必须存在
insert into newt(l1,l2) select l1,l2 from oldt where..
两个表的列属性必须对应且数量相等, newt()限制插入新表的属性,select 限制旧表的属性,where限制行数据;
注意:
新表存在主键时,如果主键不是自增主键,则必须插入主键;
前后列名、属性类型可以不一样,相对应即可;(小心精度丢失)
不含索引,拷贝数据,create as,同视图
下面这个语句会拷贝数据到新表中。
注意:这个语句其实只是把select语句的结果建一个表,所以新表不会有主键,索引。
create` `table` `table_name_new ``as` `(``select` `* ``from` `table_name_old);
只复制表属性(列名),不含索引,create as <>
create` `table` `table_name_new ``as` `select` `* ``from` `table_name_old ``where` `1=2;
是不会复制主键类型,索引的
只复制表结构,含索引,create like
create` `table` `table_name_new ``like` `table_name_old;
是把旧表的所有字段类型都复制到新表,含索引
只复制表数据,insert into select,新表必须存在
如果两个表结构一样
insert` `into` `table_name_new ``select` `* ``from` `table_name_old;
如果两个表结构不一样
insert` `into` `table_name_new(column1,column2...) ``select` `column1,column2... ``from` `table_name_old;
----!!下面语句亲测无用,mysql报语法错误!!
注意:很多文章说可以通过如下语句进行数据复制,table_name_new表可以不存在,会在执行的过程中自动创建。其实该SELECT ... INTO形式是使查询结果存储在变量或将其写入文件,即table_name_new是一个变量或者文件。
```MySQL
selectcolumn1,column2,.... into` `table_name_new
fromtable_name_old;