一、mysql 复制表结构和数据的三种情况
mysql 中复制表结构和数据,主要有以下三种情况:
一是:只复制表的结构到新表中,即新建一张与原表结构一致的表。
二是:复制表结构并同时将数据也复制到新表中,相当于备份。
三是:将一张表的数据复制插入到另一张已有表中,分为全部字段复制和部分字段复制两种情况。
二、只复制表结构到新表
只复制表的结构到新表中,即新建一张与原表结构一致的表。
如:现在有一张名为【grade】的数据表,表结构如下:

需求: 只复制原始表【grade 】的表结构到新表【grade1 】中;即新建一个【grade1 】表,结构与原始表【grade】一致。
有以下两种方法:
一是:CREATE TABLE 新表 LIKE 原始表
二是:CREATE TABLE 新表 SELECT * from 原始表 WHERE 1=2
详细用法如下:
(一)使用 like
实现方法:CREATE TABLE 新表 LIKE 原始表
示例:CREATE TABLE grade1 LIKE grade

(二)CREATE + SELECT 组合
实现方法:CREATE TABLE 新表 SELECT * from 原始表 WHERE 1=2
示例:CREATE TABLE grade1 SELECT * FROM grade WHERE 1=2

**注:**where条件过滤,(1=2)条件为假,表示什么都不选择;(1=1)条件为真,表示全都选择,常用于程序中动态拼接sql语句。
以上两种方法,最终都能实现将原始表【grade 】的表结构复制到新表【grade1】。效果如下:

三、复制表结构和数据到新表
复制表结构并同时将数据也复制到新表中,相当于备份。
如,原始表【grade】数据如下:

需求: 将原始表【grade 】的表结构和数据均复制到新表【grade1】中。
实现方法:CREATE TABLE 新表 SELECT * from 原始表
示例:CREATE TABLE grade1 SELECT * FROM grade

结果:

**特别注意:**该方法与上面的【第二章(二)】中的一致,区别就在于select 查询语句后面跟的条件不同。select 查询语句后面的条件,如(where 1=1)表示全部数据,(limit 3)表示复制3条数据等。
四、将一张表的数据复制到另一张已有表中
将一张表的数据复制插入到另一张已有表中,分为全部字段复制和部分字段复制两种情况。
(一)全部字段复制
全部字段复制,指的是原表中的所有字段都要复制过去,至于这些字段下面的所有数据,是否也全部复制过去,可以选择添加限制条件。
以此,全字段复制,就要求两张表的结构要是完全一致的。
如: 将【grade 】表的数据复制插入到表【grade3】中(两个表结构相同)。

实现方法:INSERT INTO 已有表 SELECT * FROM 原始表
示例:INSERT INTO grade3 SELECT * FROM grade


**特别注意:**select 查询语句后面可以跟条件,限制复制数据的条数等。
(二)部分字段复制
如果两个表的结构(字段)不一致,也可以只复制部分字段数据。
如:有两张表【grade】和【grade4】,两张表的结构和字段不是完全一致,使用(一)中的全部字段复制命令,显然是不行的。但是可以实现将部分字段的数据复制过去。

实现方法:INSERT INTO grade3(字段1,...) SELECT 字段1,... FROM grade
如:将原表【grade】中的【stu_course、stu_grade】两个字段的数据,复制到另一张表【grade4】中的【course、grade】两个字段。
完整命令:INSERT INTO grade4(course,grade) SELECT stu_course,stu_grade FROM grade


特别注意:
**一是:**select 查询语句后面可以跟条件,限制复制数据的条数等。
**二是:**部分字段复制时,需要注意被复制表的其他字段的约束条件,如不能为空等限制。
以上就是 mysql 中复制表结构和数据的三种情况,可供参考。
-end-