在 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;