INSERT ... SELECT 是SQL中高效批量迁移数据的方式,适用于表结构一致场景,需确保字段数量顺序、数据类型匹配及权限约束,常用于历史归档、同步和测试数据构造。
SQL 中的 INSERT ... SELECT 是一种高效、简洁的批量数据迁移方式,无需逐条插入,直接从一个或多个表中查出数据并写入目标表。它特别适合表结构一致(或可映射)的场景,比如历史归档、数据同步、测试数据构造等。
最简形式如下:
INSERT INTO target_table (col1, col2, ...) SELECT col1, col2, ... FROM source_table [WHERE ...];
关键点:
败(可配合 ON DUPLICATE KEY UPDATE 或 MERGE 实现去重插入,但属扩展用法)跨表复制部分数据:
把订单表中 2025 年已完成的订单迁入历史表:
INSERT INTO orders_history (order_id, user_id, amount, create_time) SELECT order_id, user_id, amount, create_time FROM orders WHERE status = 'completed' AND create_time
多表关联生成新记录:
根据用户表和配置表,批量为新上线用户初始化默认设置:
INSERT INTO user_settings (user_id, setting_key, setting_value) SELECT u.id, 'theme', 'light' FROM users u LEFT JOIN user_settings s ON u.id = s.user_id WHERE s.user_id IS NULL;
批量迁移时注意以下几点:
相比其他迁移手段:
INSERT SELECT 在同构数据库内迁移时,平衡了简洁性、可控性和执行效率,是 DBA 和开发最常使用的标准方案。
基本上就这些。