MySQL 复制/克隆/复制表

17 Mar 2025 | 4 分钟阅读

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

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

从上面可以看出,首先,它创建了一个新的表,如 CREATE TABLE 语句所示。其次,SELECT 语句的结果集定义了新表的结构。最后,MySQL 将从 SELECT 语句获取的数据填充到新创建的表中。

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

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

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

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

MySQL 复制/克隆表示例

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

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

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

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

MySQL Copy Table

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

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

MySQL Copy Table

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

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

MySQL Copy Table

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


MySQL Copy Table

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

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

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

以下演示更清楚地解释了这一点。

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

MySQL Copy Table

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

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

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

MySQL Copy Table
下一主题MySQL 修复表