在本教程中,您将学习如何使用CREATE TABLE
和SELECT
语句在同一数据库中或从一个表复制到同一个数据库中另一个表,这种方法可以用来备份数据库中的表。## MySQL复制表到新表将数据从现有表复制到新表是非常有用的,在某些情况下,例如:备份数据和复制生产数据用于开发和测试。要将数据从表复制到新表,请使用CREATE TABLE和SELECT语句,如下所示:sqlCREATE TABLE new_table SELECT col, col2, col3 FROM existing_table;
首先,MySQL使用CREATE TABLE语句中指定新创建表的名称。 新表的结构由SELECT
语句选择的结果集定义。 然后,MySQL将来自SELECT
语句的数据填充到新表中。要将部分数据从现有表复制到新表,可在SELECT
语句中使用WHERE子句指定条件限制,如下所示:sqlCREATE TABLE new_table SELECT col1, col2, col3 FROM existing_tableWHERE conditions;
在创建之前检查要创建的表是否已经存在是非常重要的。 为此,在CREATE TABLE
语句中使用IF NOT EXIST
子句。 将数据从现有表复制到新表的完整命令如下:sqlCREATE TABLE new_table SELECT col1, col2, col3 FROM existing_tableWHERE conditions;
注意上面的语句只是复制表及其数据。 它不复制与表相关联的其他数据库对象,例如:索引,主键约束,外键约束,触发器等。要复制一个表以及表的所有从属对象数据,请使用以下语句:sqlCREATE TABLE IF NOT EXISTS new_table LIKE existing_table; INSERT new_tableSELECT * FROM existing_table;
我们需要执行两个语句。第一个语句通过复制现有表来创建一个新表new_table
。 第二个语句将现有表中的数据插入到new_table
中。### MySQL复制表示例以下语句将数据从office
表复制到studymysql
数据库中的一个名称为offices_bk
的新表。sqlCREATE TABLE IF NOT EXISTS studymysql.office_bk SELECT * FROM studymysql.office;
我们可以通过查询office_bk
表中的数据来验证复制的结果,如下所示:sqlSELECT *FROM studymysql.office_bk;
执行上的查询语句,结果如下所示 -
SELECT
语句的WHERE
子句中指定条件,如下所示:sqlCREATE TABLE IF NOT EXISTS office_gdSELECT * FROM studymysql.officeWHERE province = '广东'
以下语句从office_gd
表中查询获取所有数据。sqlSELECT *FROM office_gd;
执行上的查询语句,结果如下所示 - office
表关联的所有数据库对象,那么可以使用以下语句:sqlCREATE TABLE office_dup LIKE office; INSERT office_dupSELECT * FROM studymysql.office;
## MySQL复制表到另一个数据库有时,可能想要将表复制到其他数据库中。 在这种情况下,可使用以下语句:sqlCREATE TABLE destination_db.new_table LIKE source_db.existing_table; INSERT destination_db.new_table SELECT *FROM source_db.existing_table;
第一个语句通过从源数据库(source_db)复制现有表(现有表)到目标数据库(destination_db)中创建一个新表new_table。第二个语句将数据从源数据库(source_db)中的现有表复制到目标数据库(destination_db)中的新表。让我们看看下面的例子。首先,我们使用以下语句创建一个名称为test
的数据库(已存在的话,就不用再创建了):sqlCREATE DATABASE IF NOT EXISTS test;
第二步,我们通过将studymysql数据库中的office
表复制其结构到test
数据库中并创建一个office
表。sqlCREATE TABLE test.office LIKE studymysql.office;
第三步,我们将数据从studymysql.office
表复制到test.office
表中。sqlINSERT test.officeSELECT *FROM studymysql.office;
让我们查询验证test.office
表中的数据。执行以下查询语句并查看结果 -sqlSELECT *FROM test.office;