MySQL 复制表

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子句允许我们在创建新表之前检查数据库中是否存在表。因此,下面的SQL更清楚地解释了它:

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

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

CREATE TABLE IF NOT EXISTS new_table_name LIKE existing_table_name;  
  
INSERT new_table_name SELECT * FROM existing_table_name;  

在上面,我们可以看到我们需要执行两个语句来复制数据以及结构和约束。第一个命令创建一个与现有表名重复的新表new_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;  

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;  

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

热门文章

优秀文章