[TOC] ## 复制数据表 >[info] ####<span style="color:forestgreen">复制数据表包括二部分信息:表结构和表中的记录</span> ### 一、复制表结构 #### 表结构字段属性包括 | 字段属性 | 说明 | | --- | --- | | 基本信息 | 字段名、类型、默认值、有无符号 | | 约束条件 | 自增、主键、索引、为空、唯一、补零 | #### 1、复制表结构的基本信息 #### 语法: ~~~ CREATE TABLE 目标表 AS SELECT * FROM 源表名 WHERE 恒假条件; ~~~ >[info] CREATE TABLE ...AS SELECT ....WHERE ....本是数据表复制语句,这里将条件设置为恒假,可以确保,只有表结构的基本信息复制到目标表中,而记录不会被复制。 #### 实例:复制tp5_staff表的基本信息到tp5_temp1 表中 #### 语句如下: ~~~ #创建tp5_temp1表,基本信息来自 tp5_staff 表 CREATE TABLE tp5_temp1 AS SELECT * FROM `TP5_STAFF` WHERE 1 > 2; #查看tp5_staff表结构信息 DESC `tp5_staff`; #查看tp5_temp1表结构信息 DESC tp5_temp1; ~~~ #### 运行结果: ![](https://box.kancloud.cn/f6f397ef68017cd5113b0a202c107b94_1106x879.png) >[info] 从运行截图看出,源表中的约束条件,如主键、自增、索引等约束条并没有复制到目标表中。 #### 如果想得到一个与源表结构完全一致的新表,请看下一个语句。 * * * * * ### 2、复制表结构的完整信息 >[info] 表结构的完整信息包括基本信息和约束条件 #### 语法: ~~~ CREATE TABLE 目标表 LIKE 源表 ; ~~~ >[info] 关键字:LIKE 本意就是像什么一样,诠释了这个语句的意思 #### 实例:从tp5_staff中复制完整结构信息到tp5_temp2表中(基本信息+约束条件) #### 语句: ~~~ #创建tp5_temp2表, 全部结构信息来自 tp5_staff 表 CREATE TABLE tp5_temp2 LIKE tp5_staff; #查看tp5_staff表结构信息 DESC `tp5_staff`; #查看tp5_temp1表结构信息 DESC tp5_temp1; ~~~ #### 运行结果: ![](https://box.kancloud.cn/a11ad15e049673e99bd11c53d18b960a_1106x879.png) * * * * * ### 3、创建数据表时,导入已存在数据表记录 >[info]1、创建数据表时,数据可以来自一张已经存在的数据表。 2、这也我们在上面的一个案例几乎一致。上例中我们只复制了源表的基本信息,现在我们除要复制表结构基本信息,还要把源表的全部数据复制过来 3、当然,也可以加入过滤条件,只复制部分信息。 #### 语法: ~~~ CREATE TABLE 目标表 AS SELECT * FROM 源表名 [ WHERE 条件]; ~~~ >[success] CREATE TABLE ...AS SELECT ....WHERE ....可以将源表中符合条件的记录复制到目标表中,如果目标表不存在,自动创建。 #### 实例:创建tp5_temp3表,数据全部来自tp5_staff表 #### 语句: ~~~ #创建tp5_temp3表,数据全部自源于 tp5_staff 子查询 CREATE TABLE tp5_temp3 AS SELECT * FROM `tp5_staff` ; #查询 tp5_staff 表 SELECT * FROM `tp5_staff`; #查询 tp5_staff 表 SELECT * FROM tp5_temp3; ~~~ #### 运行效果: ![](https://box.kancloud.cn/ea5dd4a59dae2bf4d99b61b2399c01e4_1106x879.png) ### 特别提示: >[warning] 此操作仅复制了<span style="color:red">表的基本信息和全部记录</span>,适合用于当前表的备份。如果要复制一张与源张完全一致的数据表,请用下面的方法。 * * * * * ### 4、创建与源数据表完全一样的新表 #### 实例:复制tp5_staff全部数据,包括完整结构信息到新表tp5_temp4中。 #### 思路分析: >[info] 有了上面的复制数据表的经验,我们不难总结出:如果要获得二张完全一样的表,可以分二步表:1、获取完整表结构信息;2、导入源表中全部数据。有了这个思路,下面的操作就非常容易理解了。 #### 创建步骤: 1. 获取与源数据表完全一样的结构属性,包括基本信息和约束条件(LIKE); 2. 将源数据表全部记录插入到目标数据表(INSERT) #### 语法: ~~~ #获取源表全部属性 CREATE TABLE 目标表 LIKE 源表 ; #将源表全部数据插入到目标表中 INSERT 目标表 SELECT * FROM 源表 ~~~ #### 代码如下: ~~~ # 获取源表完整结构信息 CREATE TABLE tp5_temp4 LIKE tp5_staff ; #将源表tp5_staff中全部记录插入到目标表tp5_temp4中 INSERT tp5_temp4 SELECT * FROM tp5_staff; #查看源表tp5_staff表结构 DESC tp5_staff ; #查目标表tp5_temp表结构 DESC tp5_temp4 ; ~~~ #### 运行效果如下: ![](https://box.kancloud.cn/8865dcbd08b300ee034c709645f752dc_1184x877.png) #### 下面再检查一下源表中的记录是否全部插入成功? ~~~ #查看源表 SELECT * FROM tp5_staff; #查看目标表 SELECT * FROM tp5_temp4; ~~~ #### 查询结果如下: ![](https://box.kancloud.cn/fb55edeb92a80824c6df1f25ad03e0f9_1156x849.png) ##### 可以看出,二张表完全一样,以后可以直接操作复制表,这样可以起到保护原始数据表的作用! ##### <span style="color:red">提示:</span>如何仅插入部分记录,只需要设置WHERE条件即可,非常简单,这里不再演示! >[danger] 该功能非常实用,请同学们,一定要熟悉掌握!