只迁移数据(表已存在)要点
- 语法:INSERT INTO 目标表 (列) SELECT 列 FROM 源表
- 目标表必须已存在,本句只负责灌数据不建表
- 列数、类型、顺序要匹配,可显式列出列名避免错位
- 加 WHERE 就能实现'部分迁移'或'按条件归档'
- 配合 INSERT IGNORE 可跳过主键冲突的行
- 大批量迁移用 LIMIT 分批,防止长事务锁表
只迁移数据(表已存在)示例
-- 把历史订单归档到已建好的 orders_archive 表
INSERT INTO orders_archive (id, user_id, amount, created_at)
SELECT id, user_id, amount, created_at
FROM orders
WHERE created_at BETWEEN '2000-01-01' AND '2024-12-31';
-- 跳过已存在的主键冲突
INSERT IGNORE INTO product_bak
SELECT * FROM product;
避坑提醒:列清单务必显式写出,别依赖 SELECT * ——一旦两表列顺序不同,数据就会错位写进错误的字段。