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_newfromtable_name_old;