SQL - 克隆表



您可能需要一个与现有表具有相同列、属性、索引、默认值等的精确副本。与其花费时间创建现有表的完全相同版本,不如创建现有表的克隆。

SQL **克隆操作**允许创建现有表的精确副本及其定义。使用 SQL 在各种 RDBMS 中可以进行三种类型的克隆;它们列在下面 -

  • 简单克隆
  • 浅克隆
  • 深克隆

MySQL 中的简单克隆

简单克隆操作从现有表创建一个新的副本表,并将所有记录复制到新创建的表中。为了分解此过程,使用 CREATE TABLE 语句创建一个新表;并且通过 SELECT 语句从现有表中复制的数据被复制到新表中。

这里,克隆表只继承原始表的基本列定义,例如 NULL 设置和默认值。它不继承索引和 AUTO_INCREMENT 定义。

语法

以下是 MySQL 中执行简单克隆的基本语法 -

CREATE TABLE new_table SELECT * FROM original_table;

示例

考虑以下将克隆到接下来几个步骤中的现有 CUSTOMERS 表。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

现在让我们使用以下 SQL 语句使用现有表 CUSTOMERS 创建 NEW_CUSTOMERS 表。

CREATE TABLE NEW_CUSTOMERS SELECT * FROM CUSTOMERS;

输出

输出显示为 -

Query OK, 7 rows affected (0.06 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

要验证表是否已成功克隆,我们可以使用以下 SELECT 查询 -

SELECT * FROM NEW_CUSTOMERS;

如果 NEW_CUSTOMERS 表已成功创建,则它应获取 CUSTOMERS 表中存在的所有记录。

MySQL 中的浅克隆

浅克隆操作从现有表创建一个新的副本表,但不将任何数据记录复制到新创建的表中,因此只创建新的空表。

这里,克隆表只包含原始表的结构以及列属性,包括索引和 AUTO_INCREMENT 定义。

语法

以下是 MySQL RDBMS 中执行浅克隆的基本语法 -

CREATE TABLE new_table LIKE original_table;

示例

以下是如何创建现有表 CUSTOMERS 的浅克隆副本的示例。

CREATE TABLE SHALL_CUSTOMERS LIKE CUSTOMERS;

输出

输出显示为 -

Query OK, 0 rows affected (0.06 sec)

验证

要验证表是否已成功克隆,我们可以使用以下 DESC table_name 查询 -

DESC SHALL_CUSTOMERS;

这将显示关于 SHALL_CUSTOMERS 表的信息,它只是 CUSTOMERS 表的副本 -

字段 类型 默认值 额外
ID int(11) PRI NULL
姓名 varchar(20) NULL
年龄 int(11) NULL
地址 char(25) NULL
薪水 decimal(18,2) NULL

MySQL 中的深克隆

深克隆操作是简单克隆和浅克隆的组合。它不仅复制现有表的结构,还复制其数据到新创建的表中。因此,新表将包含现有表中的所有内容以及所有属性,包括索引和 AUTO_INCREMENT 定义。

由于它是浅克隆和简单克隆的组合,这种类型的克隆将有两个不同的查询需要执行:一个使用 CREATE TABLE 语句,一个使用 INSERT INTO 语句。CREATE TABLE 语句将创建新表,其中包含现有表的所有属性;而 INSERT INTO 语句将现有表中的数据插入到新表中。

语法

以下是 MySQL RDBMS 中执行深克隆的基本语法 -

CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;

示例

以下是如何创建现有表 CUSTOMERS 的深克隆副本的示例。第一步是创建现有表的浅克隆。

CREATE TABLE DEEP_CUSTOMERS LIKE CUSTOMERS;

输出显示为 -

Query OK, 0 rows affected (0.06 sec)

现在第二步是从 CUSTOMERS 表复制所有记录到 DEEP_CUSTOMERS。

INSERT INTO DEEP_CUSTOMERS SELECT * FROM CUSTOMERS;

输出

输出显示为 -

Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

要验证表是否已成功克隆,我们可以使用以下 SELECT 查询 -

SELECT * FROM DEEP_CUSTOMERS;

如果 DEEP_CUSTOMERS 表成功克隆,则它应获取 CUSTOMERS 中存在的所有记录。

SQL Server 中的表克隆

但是,SQL Server 中没有直接的方法可以完全克隆表。但是,我们有一些解决方法来处理这种情况。

SELECT...INTO 语句

MS SQL Server 可以使用 **SELECT...INTO** 语句来创建一个新表并将数据从现有表复制到其中。但是,此命令仅复制数据,而不复制其定义,因此省略了约束、索引等(如果有)。如果希望在新表中拥有原始表的完全相同结构,则需要单独添加它们。

您可以使用 SELECT...INTO 命令在同一数据库内以及跨不同数据库复制表。

语法

以下是 SELECT...INTO 语句的基本语法 -

SELECT * INTO new_table FROM original_table;

上述 SQL 命令将使用 **original_table** 的结构创建一个表 **new_table**,然后它将 original_table 中的所有数据复制到 new_table。

示例

考虑以下将在此部分中克隆的现有 CUSTOMERS 表。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

现在,如果要将此表的数据克隆到新表 **NEW_CUSTOMERS** 中,让我们使用以下 SQL 查询,如下所示 -

SELECT * INTO NEW_CUSTOMERS FROM CUSTOMERS;

输出

输出将显示为 -

(7 rows affected)

验证

要验证所有数据是否已复制到新表 NEW_CUSTOMERS 中,我们将使用以下 SQL SELECT 语句 -

SELECT * FROM NEW_CUSTOMERS;

如果 NEW_CUSTOMERS 表已成功创建,则它应获取 CUSTOMERS 表中存在的所有记录。

广告
© . All rights reserved.