Sql 简明教程
SQL - Clone Tables
有时,您可能需要同列、属性、索引、默认值等的表的精确副本。无需花费时间创建现有表的完全相同版本,您可以创建现有表的克隆。
SQL Cloning Operation 允许创建现有表的精确副本及其定义。使用 SQL 在各种 RDBMS 中可进行三种类型的克隆;列举如下——
-
Simple Cloning
-
Shallow Cloning
-
Deep Cloning
Simple Cloning in MySQL
简单的克隆操作从现有表创建一个新的副本表,并将所有记录复制到新创建的表中。要分解此过程,使用 CREATE TABLE 语句创建新表;并将现有表中的数据,作为 SELECT 语句的结果,复制到新表中。
在此处,克隆表仅从原始表继承基本列定义,例如 NULL 设置和默认值。它不会继承索引和 AUTO_INCREMENT 定义。
Example
考虑以下存在的 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 |
Hyderabad |
4500.00 |
7 |
Muffy |
24 |
Indore |
10000.00 |
现在,我们使用以下 SQL 语句,使用现有表 CUSTOMERS 创建 NEW_CUSTOMERS 表。
CREATE TABLE NEW_CUSTOMERS SELECT * FROM CUSTOMERS;
Shallow Cloning in MySQL
浅克隆操作从现有表创建一个新的副本表,但是不会将任何数据记录复制到新创建的表中,因此仅创建一个新的空表。
在此,克隆表仅包含原始表的结构以及列属性(包括索引和 AUTO_INCREMENT 定义)。
Deep Cloning in MySQL
深克隆操作是简单克隆和浅克隆的组合。它不仅复制现有表的结构,还将其数据复制到新创建的表中。因此,新表将具有现有表中的所有内容和所有属性(包括索引和 AUTO_INCREMENT 定义)。
由于它是浅克隆和简单克隆的组合,因此此类克隆将具有两个需要执行的不同查询:一个带有 CREATE TABLE 语句,另一个带有 INSERT INTO 语句。CREATE TABLE 语句将通过包括表的所有属性,创建新表;INSERT INTO 语句将数据从现有表插入到新表中。
Syntax
以下是在 MySQL RDBMS 中执行深克隆的基本语法 -
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;
Table Cloning in SQL Server
但是,没有直接的方法在 SQL 服务器中完全克隆一个表。但是,我们有一些解决方法来处理这种情况。
SELECT…INTO STATEMENT
MS SQL 服务器可以使用 SELECT…INTO 语句来创建一个新表,并将现有表中的数据复制到其中。但是,此命令仅复制数据,而不复制其定义,因此,如果存在,则会省略约束、索引等。如果希望新表具有与原始表完全相同的结构,则需要分别对其进行添加。
Syntax
以下是 SELECT…INTO 语句的基本语法:
SELECT * INTO new_table FROM original_table;
上述 SQL 命令将使用 new_table 的结构创建一个表,然后它将从 original_table 复制所有数据到 new_table。
Example
考虑将在本节中克隆的现有 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 |
Hyderabad |
4500.00 |
7 |
Muffy |
24 |
Indore |
10000.00 |
现在,如果您想将此表的克隆数据复制到新表 NEW_CUSTOMERS 中,那么让我们使用以下所示的 SQL 查询:
SELECT * INTO NEW_CUSTOMERS FROM CUSTOMERS;