📜  MySQL复制表

📅  最后修改于: 2020-11-17 02:20:30             🧑  作者: Mango

MySQL复制/克隆/重复表

MySQL复制或克隆表的功能允许我们创建现有表的重复表,包括表结构,索引,约束,默认值等。在数据库中将现有表的数据复制到新表中非常有用。诸如在表故障时备份数据的情况。当我们需要在不影响原始表的情况下进行测试或执行某些操作(例如,复制生产数据以进行测试)时,这也是有利的。

我们可以使用CREATE TABLE和SELECT语句将现有表复制到新表,如下所示:

CREATE TABLE new_table_name
SELECT column1, column2, column3 
FROM existing_table_name;

从上面的内容开始,它首先创建一个新表,该表在CREATE TABLE语句中指示。其次,SELECT语句的结果集定义了新表的结构。最后,MySQL填充从SELECT语句到新创建的表的数据。

如果只需要将部分数据从现有表复制到新表,请使用WHERE子句和SELECT语句,如下所示:

CREATE TABLE new_table_name
SELECT column1, column2, column3 
FROM existing_table_name
WHERE condition;

我们必须确保要创建的表不应该存在于数据库中。 MySQL中的IF NOT EXISTS子句允许我们在创建新表之前检查数据库中是否存在表。因此,下面的语句更清楚地说明了这一点:

CREATE TABLE IF NOT EXISTS new_table_name
SELECT column1, column2, column3 
FROM existing_table_name
WHERE condition;

请注意,此语句仅复制表及其数据。它不会复制表的所有依赖对象,例如索引,触发器,主键约束,外键约束等。因此,将数据及其依赖对象从现有表复制到新表的命令可以写为以下语句:

CREATE TABLE IF NOT EXISTS new_table_name LIKE existing_table_name;

INSERT new_table_name SELECT * FROM existing_table_name;

在上面,我们可以看到需要执行两个语句来复制数据以及结构和约束。第一个命令创建一个新表new_table_name,该表复制了existing_table_name,第二个命令将数据从现有表添加到new_table_name。

MySQL复制/克隆表示例

让我们演示如何在示例的帮助下创建重复表。首先,我们将使用以下语句创建一个名为“ original_table”的表:

CREATE TABLE original_table (
    Id int PRIMARY KEY NOT NULL, 
    Name varchar(45) NOT NULL, 
    Product varchar(45) DEFAULT NULL, 
    Country varchar(25) DEFAULT NULL, 
    Year int NOT NULL
);

接下来,需要向该表中添加值。执行以下语句:

INSERT INTO original_table( Id, Name, Product, Country, Year) 
VALUES (1, 'Stephen', 'Computer', 'USA', 2015), 
(2, 'Joseph', 'Laptop', 'India', 2016), 
(3, 'John', 'TV', 'USA', 2016),
(4, 'Donald', 'Laptop', 'England', 2015),
(5, 'Joseph', 'Mobile', 'India', 2015),
(6, 'Peter', 'Mouse', 'England', 2016);

接下来,执行SELECT语句以显示记录:

mysql> SELECT * FROM original_table;

我们将获得输出,如下所示:

现在,执行以下语句,将数据从现有表“ original_table”复制到所选数据库中名为“ duplicate_table”的新表中。

CREATE TABLE IF NOT EXISTS duplicate_table 
SELECT * FROM original_table;

成功执行后,我们可以使用SELECT语句验证表数据。请参见以下输出:

有时仅需要将部分数据从现有表复制到新表。在这种情况下,我们可以将WHERE子句与SELECT语句一起使用,如下所示:

CREATE TABLE IF NOT EXISTS duplicate_table 
SELECT * FROM original_table WHERE Year = '2016';

该语句创建一个重复表,其中仅包含2016年的数据。我们可以使用SELECT语句验证表,如下所示:

假设需要复制现有表以及与该表关联的所有从属对象,请执行以下两个语句:

mysql> CREATE TABLE duplicate_table LIKE original_table;
AND,
mysql> INSERT duplicate_table SELECT * FROM original_table;

让我们看看如何通过示例将表复制到其他数据库。

假设存在从其他数据库复制表的情况。在这种情况下,我们需要执行以下语句:

CREATE TABLE destination_db.new_table_name 
LIKE source_db.existing_table_name;

INSERT destination_db.new_table_name 
SELECT * FROM source_db.existing_table_name;

在上面的代码中,第一个命令通过从源数据库克隆现有表在选定(目标)数据库中创建一个新表。第二条命令将数据从现有表复制到所选数据库中的新表。

以下演示对此进行了更清晰的说明。

假设我们在MySQL服务器上有两个名为“ mysqltestdb”和“ mystudentdb”的数据库。 mytestdb数据库包含一个名为“ original_table”的表,该表具有以下数据:

现在,我们将使用以下语句将此表复制到另一个名为mystudentdb的数据库中:

CREATE TABLE mystudentdb.duplicate_table 
LIKE mysqltestdb.original_table;

INSERT mystudentdb.duplicate_table 
SELECT * FROM mysqltestdb.original_table;

成功执行后,我们可以使用以下命令验证mystudentdb数据库中的表:

mysql> SELECT * FROM mystudentdb.duplicate_table;

在下面的输出中,我们可以看到该表已成功复制到一个数据库中并复制到另一个数据库中。