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