MySQL 中,快速复制表里的数据主要取决于你是想复制数据表结构,还是结构+数据一起复制。下面我分几种常见情况给你最实用的写法。

一、只复制数据到已有表中

假设你有两张结构相同的表:

  • 源表:table_a
  • 目标表:table_b

语法:

INSERT INTO table_b
SELECT * FROM table_a;

💡要求 table_b 已存在,并且字段结构与 table_a 一致。
如果字段不完全一样,可指定字段:

INSERT INTO table_b (col1, col2, col3)
SELECT col1, col2, col3 FROM table_a;

二、复制表结构 + 数据(创建新表)

想快速生成一张新表(含数据),用:

CREATE TABLE new_table AS
SELECT * FROM old_table;

💡 这会复制数据和表结构(字段定义),但不会复制索引主键外键等约束。

如果只想复制表结构不含数据

CREATE TABLE new_table LIKE old_table;

三、复制部分数据(带条件)

只复制符合条件的数据,比如复制 2024 年的数据:

CREATE TABLE new_table AS
SELECT * FROM old_table
WHERE YEAR(create_time) = 2024;

或者插入已有表:

INSERT INTO table_b
SELECT * FROM table_a WHERE status = 'active';

四、保留索引和约束

CREATE TABLE ... LIKE 可以完整复制索引结构:

CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;

这两步组合能得到结构+索引+数据的完整克隆。

五、超快方式(大数据量场景)

如果数据量特别大(几百万行以上):

  • 使用 CREATE TABLE ... LIKE + INSERT INTO ... SELECT
  • 并关闭日志或禁用外键约束可提速(执行前后务必恢复):
SET foreign_key_checks = 0;
SET unique_checks = 0;
INSERT INTO new_table SELECT * FROM old_table;
SET foreign_key_checks = 1;
SET unique_checks = 1;

六、复制到另一数据库

如果要把表复制到另一数据库中:

CREATE TABLE db2.table_copy LIKE db1.table_original;
INSERT INTO db2.table_copy SELECT * FROM db1.table_original;