Mysql 简明教程
MySQL - Clone Tables
可能存在这样的情况:你需要一张表格的准确副本,其中包含相同的列、属性、索引、默认值等。不用花时间使用 Create Table 语句创建现有表的完全相同版本,你可以不干扰原始表而克隆该表。
在 SQL 允许用户使用 Cloning operation 创建现有表的准确副本以及其定义,这完全独立于原始表。因此,如果对克隆的表进行了任何更改,它们都不会反映在原始表中。此操作在测试过程中会派上用场,这时需要使用现有数据库表执行示例测试。
在 MySQL RDBMS 中可以使用 SQL 执行三种类型的克隆;它们列在下面:
-
简单克隆:创建一个包含现有表相同记录的新表,但没有任何约束或索引等。
-
浅表克隆:创建一张新的空表,具有与现有表相同的表定义。
-
深表克隆:创建一张新表,并复制现有表的结构和数据到新表。
Cloning Tables in MySQL
通过以下步骤处理此情况:
-
使用“SHOW CREATE TABLE”获取“CREATE TABLE”语句,该语句指定源表结构、索引等。
-
修改语句,将表名更改为克隆表的名称,并执行该语句。这样,您将获得一个完全的克隆表。
-
另外,如果还需要复制表内容,请再发布“INSERT INTO… SELECT”语句。
Example
尝试以下示例,为 CUSTOMERS 创建一个克隆表。
Step 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
Step 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;
Step 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”完全一样的克隆表。
但为了让该流程更简单,我们可以尝试使用 CREATE TABLE 和 INSERT INTO 语句执行简单克隆、浅表克隆或深表克隆。让我们在本文档中详细地逐个讨论,并提供适当的示例。
Simple Cloning in MySQL
简单克隆意味着创建一个包含与现有表相同数据的新表。首先,使用 CREATE TABLE 语句创建一个新表。然后,使用 SELECT 语句将现有表中选定列的数据复制到新表。
Example
为了执行简单的克隆操作,让我们首先使用以下查询创建一个名为 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 表 −
现在,使用以下查询,我们通过 cloning 创建一个新表 CUSTOMERScopy 客户表。
CREATE TABLE CUSTOMERScopy SELECT * FROM CUSTOMERS;
Shallow Cloning in MySQL
浅克隆操作只将现有表的结构复制到创建的新表中,但它不会复制任何数据。因此,我们最终得到一个新表,该表与现有表的结构相同,但为空。
Deep Cloning in MySQL
深克隆操作是简单克隆和浅克隆的组合。它不仅复制现有表的结构,还复制其数据到新创建的表中。因此,新表将具有现有表的所有属性及其内容。
由于它是浅克隆和简单克隆的组合,因此此类克隆将具有两个需要执行的不同查询:一个带有 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;