
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表(資料)
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 鍵
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 候選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
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 表中存在的所有記錄。