程序员社区

MySQL系列教程 --- 21、MySQL 复制表

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

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

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;  

我们会得到输出,如下图:

file

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

CREATE TABLE IF NOT EXISTS duplicate_table   
SELECT * FROM original_table;  

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

file

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

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

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

file

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

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

file

让我们通过一个例子来看看如何将一个表复制到不同的数据库中。

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

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”的表,其中包含以下数据:

file

现在,我们将使用以下语句将此表复制到另一个名为 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;  

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

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 21、MySQL 复制表

一个分享Java & Python知识的社区