SQL 克隆表格

SQL 克隆表格

可能有一种情况,您需要一个与原表完全相同的表的副本,包括相同的列、属性、索引、默认值等等。与其花时间创建一个与现有表完全相同的版本,您可以创建一个现有表的克隆。

SQL的克隆操作允许创建现有表的完全副本及其定义。在各种RDBMS中,有三种使用SQL进行克隆操作的可能性;它们如下所示:

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

MySQL中的简单克隆

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

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

语法

执行MySQL中简单克隆的基本语法如下所示:

CREATE TABLE new_table SELECT * FROM original_table;

示例

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

ID NAME AGE ADDRESS SALARY
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 Pune 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表的副本 –

Field Type Null Key Default Extra
ID int(11) NO PRI NULL
NAME varchar(20) NO NULL
AGE int(11) NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES 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服务器中并没有直接的方法来完全克隆一个表。然而,我们有一些解决办法来处理这种情况。

SELECT…INTO语句

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

您可以使用SELECT…INTO命令将表复制到同一数据库以及不同的数据库中。

语法

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

SELECT * INTO new_table FROM original_table;

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

示例

在本节中,考虑以下现有的CUSTOMERS表,该表将被克隆。

ID NAME AGE ADDRESS SALARY
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 Pune 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表中所有可用的记录。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程