Sql 简明教程

SQL - Clone Tables

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

SQL Cloning Operation 允许创建现有表的精确副本及其定义。使用 SQL 在各种 RDBMS 中可进行三种类型的克隆;列举如下——

  1. Simple Cloning

  2. Shallow Cloning

  3. Deep Cloning

Simple Cloning in MySQL

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

在此处,克隆表仅从原始表继承基本列定义,例如 NULL 设置和默认值。它不会继承索引和 AUTO_INCREMENT 定义。

Syntax

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

CREATE TABLE new_table SELECT * FROM original_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

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

CREATE TABLE NEW_CUSTOMERS SELECT * FROM CUSTOMERS;

Output

输出显示为 -

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

Verification

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

SELECT * FROM NEW_CUSTOMERS;

如果 NEW_CUSTOMERS 表成功创建,那么它应该获得 CUSTOMERS 表中可用的所有记录。

Shallow Cloning in MySQL

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

在此,克隆表仅包含原始表的结构以及列属性(包括索引和 AUTO_INCREMENT 定义)。

Syntax

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

CREATE TABLE new_table LIKE original_table;

Example

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

CREATE TABLE SHALL_CUSTOMERS LIKE CUSTOMERS;

Output

输出显示为 -

Query OK, 0 rows affected (0.06 sec)

Verification

为了验证该表是否成功克隆,我们可以使用以下 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

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;

Example

以下是创建现有表 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;

Output

输出显示为 -

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

Verification

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

SELECT * FROM DEEP_CUSTOMERS;

如果 DEEP_CUSTOMERS 表成功克隆,那么它应该获得 CUSTOMERS 表中可用的所有记录。

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;

Output

输出将显示为:

(7 rows affected)

Verification

为了验证是否已将所有数据复制到新表 NEW_CUSTOMERS 中,我们应使用如下所示的 SQL SELECT 语句:

SELECT * FROM NEW_CUSTOMERS;

如果 NEW_CUSTOMERS 表成功创建,那么它应该获得 CUSTOMERS 表中可用的所有记录。