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表中所有可用的记录。