MySQL 复制/克隆/复制表

2024年03月27日 MySQL 复制/克隆/复制表 极客笔记

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;

我们将得到如下所示的输出:

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

CREATE TABLE IF NOT EXISTS duplicate_table 
SELECT * FROM original_table;

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

有时候需要将现有表中的部分数据复制到新表中。在这种情况下,我们可以使用带有SELECT语句的WHERE子句来实现:

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;

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

本文链接:http://so.lmcjl.com/news/478/

展开阅读全文