
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入選擇
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION 與 UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - UNION 與 JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式和運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 雜項概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入到資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字元集
- MySQL - 校對
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示 Processlist
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 克隆表
可能存在需要一個表的精確副本,該副本具有相同的列、屬性、索引、預設值等的情況。與其花費時間使用 CREATE TABLE 語句建立現有表的完全相同版本,不如克隆該表而不干擾原始表。
SQL 中的克隆操作允許使用者建立現有表的精確副本及其定義,該副本與原始表完全獨立。因此,如果對克隆表進行了任何更改,則不會反映在原始表中。此操作在測試過程中非常有用,在測試過程中需要使用現有的資料庫表執行示例測試。
使用 MySQL RDBMS 中的 SQL 可以進行三種類型的克隆;它們列在下面 -
簡單克隆:建立一個新表,其中包含現有表的相同記錄,但不包含任何約束或索引等。
淺克隆:建立一個新空表,該表與現有表的表定義相同。
深克隆:建立一個新表,並將現有表的表結構和資料複製到新表。
在 MySQL 中克隆表
您可以按照以下步驟處理這種情況 -
使用 SHOW CREATE TABLE 獲取指定源表結構、索引和所有內容的 CREATE TABLE 語句。
修改該語句以將表名更改為克隆表的表名,並執行該語句。這樣,您將擁有精確的克隆表。
可選地,如果您還需要複製表內容,則也發出 INSERT INTO ... SELECT 語句。
示例
嘗試以下示例為CUSTOMERS建立克隆表。
步驟 1 - 首先,使用 CREATE TABLE 語句建立 CUSTOMERS。
CREATE TABLE CUSTOMERS ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
使用以下 INSERT INTO 語句將一些記錄插入其中。
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (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 );
現在,執行以下 SHOW CREATE TABLE 命令以顯示源表 (CUSTOMERS) 的結構。
SHOW CREATE TABLE CUSTOMERS;
以下是 CUSTOMERS 表的結構。
Table: CUSTOMERS Create Table: CREATE TABLE `customers` ( `ID` int NOT NULL AUTO_INCREMENT, `NAME` varchar(20) NOT NULL, `AGE` int NOT NULL, `ADDRESS` char(25) DEFAULT NULL, `SALARY` decimal(18,2) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
步驟 2 - 現在,複製上述源表結構,只需將名稱更改為copyCUSTOMERS。
CREATE TABLE `copyCUSTOMERS` ( `ID` int NOT NULL AUTO_INCREMENT, `NAME` varchar(20) NOT NULL, `AGE` int NOT NULL, `ADDRESS` char(25) DEFAULT NULL, `SALARY` decimal(18,2) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
步驟 3 - 執行步驟 2 後,如果我們想從源表複製資料,則可以使用 INSERT INTO... SELECT 語句。
INSERT INTO copyCUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) SELECT ID,NAME,AGE,ADDRESS,SALARY FROM CUSTOMERS;
讓我們使用以下查詢驗證克隆表 copyCUSTOMERS 是否與 CUSTOMERS 表具有相同的記錄 -
SELECT * FROM copyCUSTOMERS;
正如我們觀察到的輸出,我們有一個與 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 |
但是為了簡化此過程,我們可以嘗試使用 CREATE TABLE 和 INSERT INTO 語句執行簡單克隆、淺克隆或深克隆。讓我們在本教程的後面詳細討論它們,並提供相應的示例。
在 MySQL 中進行簡單克隆
簡單克隆意味著建立一個新表,該表包含與現有表相同的資料。首先,使用 CREATE TABLE 語句建立一個新表。然後,使用 SELECT 語句將現有表中選定列的資料複製到新表中。
語法
以下是執行 MySQL RDBMS 中簡單克隆的基本語法 -
CREATE TABLE new_table SELECT * FROM original_table;
示例
要執行簡單克隆操作,讓我們首先使用以下查詢建立一個名為CUSTOMERS的表 -
CREATE TABLE CUSTOMERS ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
以下查詢將 7 條記錄插入到上面建立的表中 -
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (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 );
要顯示上面建立的表的記錄,請執行以下查詢 -
SELECT * FROM CUSTOMERS;
以下是 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 |
現在,使用以下查詢,我們將透過**克隆**CUSTOMERS表建立一個名為**CUSTOMERScopy**的新表。
CREATE TABLE CUSTOMERScopy SELECT * FROM CUSTOMERS;
輸出
執行上面的查詢將產生以下輸出:
Query OK, 7 rows affected (0.02 sec) Records: 7 Duplicates: 0 Warnings: 0
驗證
為了驗證新表是否包含現有表CUSTOMERS中的所有資訊,我們可以使用以下SELECT查詢:
SELECT * FROM CUSTOMERScopy;
以下是CUSTOMERScopy表:
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 |
在 MySQL 中進行淺克隆
淺克隆操作僅將現有表的結構複製到新建立的表中,但不會複製任何資料。因此,我們最終得到一個新的空表,其結構與現有表相同。
語法
以下是MySQL RDBMS中執行淺克隆的基本語法:
CREATE TABLE testCUSTOMERS1 LIKE CUSTOMERS;
示例
在以下查詢中,我們透過建立一個名為**CUSTOMERScopy1**的新表來克隆CUSTOMERS表,從而執行淺克隆。
CREATE TABLE CUSTOMERScopy1 LIKE CUSTOMERS;
輸出
執行上面的查詢將產生以下輸出:
Query OK, 0 rows affected (0.03 sec)
驗證
為了驗證新表是否已建立,我們可以使用以下SELECT查詢:
SELECT * FROM CUSTOMERScopy1;
如輸出所示,新表CUSTOMERScopy1已建立,但沒有複製任何資料到其中。
Empty set (0.00 sec)
在 MySQL 中進行深克隆
深克隆操作是簡單克隆和淺克隆的組合。它不僅複製現有表的結構,還將資料複製到新建立的表中。因此,新表將具有現有表的所有屬性及其內容。
由於它是淺克隆和簡單克隆的組合,因此此型別的克隆將有兩個不同的查詢需要執行:一個使用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表建立一個名為**CUSTOMERScopy2**的新表,即首先執行**淺克隆**。
CREATE TABLE CUSTOMERScopy2 LIKE CUSTOMERS;
現在,使用以下查詢,我們將CUSTOMERS表中的資料插入到新表CUSTOMERScopy2中,即執行**簡單克隆**。
INSERT INTO CUSTOMERScopy2 SELECT * FROM CUSTOMERS;
輸出
執行上面的查詢將產生以下輸出:
Query OK, 7 rows affected (0.01 sec) Records: 7 Duplicates: 0 Warnings: 0
驗證
為了驗證新表是否已建立,以及其中是否存在所有資料,我們可以使用以下SELECT查詢:
SELECT * FROM CUSTOMERScopy2;
正如我們觀察到的輸出,CUSTOMERScopy2表與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 |
使用客戶端程式克隆表
除了使用MySQL查詢克隆現有表之外,還可以使用客戶端程式對錶執行克隆操作。
語法
以下是各種程式語言中克隆表的語法:
要透過PHP程式將表克隆到MySQL資料庫中,我們需要使用**mysqli**函式**query()**執行以下語句:
$sql = "CREATE TABLE clone_table LIKE tut_tbl"; $mysqli->query($sql);
要透過Node.js程式將表克隆到MySQL資料庫中,我們需要使用**mysql2**庫的**query()**函式執行以下語句:
sql = "CREATE TABLE new_table SELECT * FROM original_table"; con.query(sql);
要透過Java程式將表克隆到MySQL資料庫中,我們需要使用**JDBC**函式**executeUpdate()**執行以下語句:
String sql = "CREATE TABLE clone_table LIKE tut_tbl"; statement.executeUpdate(sql);
要透過Python程式將表克隆到MySQL資料庫中,我們需要使用MySQL**Connector/Python**的**execute()**函式執行以下語句:
sql = "CREATE TABLE new_table_name AS SELECT * FROM source_table_name"; cursorObj.execute(sql);
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } printf('Connected successfully.
'); // clone table // To inherit all table definitions, use the create table...like syntax $sql = "CREATE TABLE clone_table LIKE tut_tbl"; if ($mysqli->query($sql)) { printf("Table cloned successfully.
"); } if ($mysqli->errno) { printf("table could not be cloned: %s
", $mysqli->error); } // To copy the data, you'll need INSER...SELECT $cpy_data = "INSERT INTO clone_table SELECT * FROM tut_tbl"; if ($mysqli->query($cpy_data)) { printf("fully cloned including data.
"); } if ($mysqli->errno) { printf("table could not be cloned fully: %s
", $mysqli->error); } $mysqli->close();
輸出
獲得的輸出如下:
Connected successfully. Table cloned successfully. fully cloned including data.
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); sql = "CREATE DATABASE TUTORIALS;" con.query(sql); sql = "USE TUTORIALS;" con.query(sql); sql = "CREATE TABLE CUSTOMERS(ID int NOT NULL, NAME varchar(20) NOT NULL, AGE int NOT NULL, ADDRESS varchar(25), SALARY decimal(18, 2), PRIMARY KEY (ID) );" con.query(sql); sql = "INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (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, 'MP', 4500.00 ),(7, 'Muffy',24, 'Indore', 10000.00 );" con.query(sql); sql = "CREATE TABLE testCUSTOMERS SELECT * FROM CUSTOMERS;" con.query(sql); sql = "SELECT * FROM testCUSTOMERS;" con.query(sql, function(err, result){ if (err) throw err console.log("**Records in Clone table**") console.log(result); }); });
輸出
產生的輸出如下:
Connected! -------------------------- **Records in Clone table** [ { ID: 1, NAME: 'Ramesh', AGE: 32, ADDRESS: 'Ahmedabad', SALARY: '2000.00' }, { ID: 2, NAME: 'Khilan', AGE: 25, ADDRESS: 'Delhi', SALARY: '1500.00' }, { ID: 3, NAME: 'kaushik', AGE: 23, ADDRESS: 'Kota', SALARY: '2000.00' }, { ID: 4, NAME: 'Chaitali', AGE: 25, ADDRESS: 'Mumbai', SALARY: '6500.00' }, { ID: 5, NAME: 'Hardik', AGE: 27, ADDRESS: 'Bhopal', SALARY: '8500.00' }, { ID: 6, NAME: 'Komal', AGE: 22, ADDRESS: 'MP', SALARY: '4500.00' }, { ID: 7, NAME: 'Muffy', AGE: 24, ADDRESS: 'Indore', SALARY: '10000.00' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class CloneTable { public static void main(String[] args){ String url = "jdbc:mysql://:3306/TUTORIALS"; String username = "root"; String password = "password"; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Creates clone tables...! String sql = "CREATE TABLE clone_tbl LIKE customers"; statement.executeUpdate(sql); System.out.println("Clone table of customers has been created successfully...!"); connection.close(); } catch(Exception e){ System.out.println(e); } } }
輸出
獲得的輸出如下所示:
Connected successfully...! Clone table of customers has been created successfully...!
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) source_table_name = 'tutorials_tbl' new_table_name = 'tutorials_tbl_cloned' #Creating a cursor object cursorObj = connection.cursor() cursorObj.execute(f"CREATE TABLE {new_table_name} AS SELECT * FROM {source_table_name}") print(f"Table '{source_table_name}' is cloned to '{new_table_name}' successfully.") cursorObj.close() connection.close()
輸出
以下是上述程式碼的輸出:
Table 'tutorials_tbl' is cloned to 'tutorials_tbl_cloned' successfully.