摘要:在本教程中,您将学习如何使用 CREATE TABLE 和 SELECT 语句将同一数据库中的表复制或从一个数据库复制到另一个数据库。
MySQL 将表复制到新表
在某些情况下,将数据从现有表复制到新表非常有用,例如备份数据和复制生产数据以进行测试。
要将数据从表复制到新表,请使用CREATE TABLE和SELECT语句,如下所示:
CREATE TABLE new_table
SELECT col, col2, col3
FROM
existing_table;
Code language: SQL (Structured Query Language) (sql)
首先,MySQL 创建一个新表,其名称在CREATE TABLE 语句中指定。新表的结构由SELECT
语句的结果集定义。然后,MySQL 将来自SELECT
语句的数据填充到新表中。
要将部分数据从现有表复制到新表,请在SELECT 语句中使用WHERE 子句,如下所示:
CREATE TABLE new_table
SELECT col1, col2, col3
FROM
existing_table
WHERE
conditions;
Code language: SQL (Structured Query Language) (sql)
在创建之前检查要创建的表是否已经存在非常重要。为此,您可以在CREATE TABLE
语句中使用IF NOT EXIST
子句。将数据从现有表复制到新表的完整命令如下:
CREATE TABLE new_table
SELECT col1, col2, col3
FROM
existing_table
WHERE
conditions;
Code language: SQL (Structured Query Language) (sql)
请注意,上面的语句只是复制表及其数据。它不会复制与表关联的其他数据库对象,例如索引、主键约束、外键约束、触发器等。
要从一个表以及该表的所有依赖对象复制数据,请使用以下语句:
CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;
INSERT new_table
SELECT * FROM existing_table;
Code language: SQL (Structured Query Language) (sql)
我们需要执行两条语句。第一条语句通过复制existing_table
表创建一个新表new_table
。第二条语句将现有表中的数据插入new_table
中。
MySQL 复制表示例
以下语句将offices
表中的数据复制到classicmodels
示例数据库中名为offices_bk
的新表中。
CREATE TABLE IF NOT EXISTS offices_bk
SELECT * FROM
offices;
Code language: SQL (Structured Query Language) (sql)
我们可以通过查询office_bk
表中的数据来验证副本,如下所示:
SELECT
*
FROM
offices_bk;
Code language: SQL (Structured Query Language) (sql)
如果我们只想复制美国的办事处,我们可以将WHERE
子句添加到SELECT
语句中,如下所示:
CREATE TABLE IF NOT EXISTS offices_usa
SELECT *
FROM
offices
WHERE
country = 'USA'
Code language: SQL (Structured Query Language) (sql)
以下语句获取offices_usa
表中的所有数据。
SELECT
*
FROM
offices_usa;
Code language: SQL (Structured Query Language) (sql)
假设我们不仅要复制数据,还要复制与offices
表关联的所有数据库对象,我们使用以下语句:
CREATE TABLE offices_dup LIKE offices;
INSERT office_dup
SELECT * FROM offices;
Code language: SQL (Structured Query Language) (sql)
MySQL复制表到另一个数据库
有时,您想要将表复制到不同的数据库。在这种情况下,您可以使用以下语句:
CREATE TABLE destination_db.new_table
LIKE source_db.existing_table;
INSERT destination_db.new_table
SELECT *
FROM source_db.existing_table;
Code language: SQL (Structured Query Language) (sql)
第一条语句通过从源数据库 (source_db) 复制现有表 (existing_table) 在目标数据库 (destination_db) 中创建一个新表 new_table。
第二条语句将数据从源数据库中的现有表复制到目标数据库中的新表。
让我们看下面的例子。
首先,我们使用以下语句创建一个名为 testdb 的数据库:
CREATE DATABASE IF NOT EXISTS testdb;
Code language: SQL (Structured Query Language) (sql)
其次,我们通过从classicmodels
数据库中的offices
表复制其结构来在testdb
中创建offices
表。
CREATE TABLE testdb.offices LIKE classicmodels.offices;
Code language: SQL (Structured Query Language) (sql)
第三,我们将数据从 classimodels.offices 表复制到 testdb.offices 表。
INSERT testdb.offices
SELECT *
FROM classicmodels.offices;
Code language: SQL (Structured Query Language) (sql)
让我们验证testdb.offices
表中的数据。
SELECT
*
FROM
testdb.offices;
Code language: SQL (Structured Query Language) (sql)
在本教程中,我们向您展示了在数据库中复制表以及从一个数据库复制到另一个数据库的各种技术。