MySQL Copy Table With Examples

摘要在本教程中,您将学习如何使用 CREATE TABLE 和 SELECT 语句将同一数据库中的表复制或从一个数据库复制到另一个数据库。

MySQL 将表复制到新表

在某些情况下,将数据从现有表复制到新表非常有用,例如备份数据和复制生产数据以进行测试。

要将数据从表复制到新表,请使用CREATE TABLESELECT语句,如下所示:

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)
MySQL 复制表示例

如果我们只想复制美国的办事处,我们可以将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)
MySQL COPY TABLE 复制部分数据示例

假设我们不仅要复制数据,还要复制与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)
MySQL 复制表示例

在本教程中,我们向您展示了在数据库中复制表以及从一个数据库复制到另一个数据库的各种技术。

本教程有帮助吗?