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 表中存在的所有記錄。

廣告