MySQL批量插入多条数据的核心是单条INSERT多值语法,如INSERT INTO users VALUES (...),(...),(...);还可结合LOAD DATA INFILE快速导入大文件、显式事务控制(每1000–5000行提交)、INSERT...SELECT表间复制等方式提升效率。

MySQL 批量插入多条数据,核心是用一条 INSERT INTO ... VALUES (...), (...), (...) 语句代替多次单条插入,能显著提升性能、减少网络往返和事务开销。
使用单条 INSERT 多值语法
这是最常用、最直接的批量插入方式。语法是在 VALUES 后连续列出多组括号,每组对应一行数据:
INSERT INTO users (name, age, email) VALUES
('张三', 25, 'zhangsan@example.com'),
('李四', 30, 'lisi@example.com'),
('王五', 28, 'wangwu@example.com');
- 一次最多可插入约 1000 行(受
max_allowed_packet和行长度限制) - 所有值必须类型匹配,且列顺序与
INSERT INTO指定列一致 - 避免在循环中拼接大量值——应先在应用层组装好再执行
利用 LOAD DATA INFILE 快速导入大文件
当数据来自 CSV 或文本文件且量较大(万级以上),LOAD DATA INFILE 比 INSERT 快数倍:
LOAD DATA INFILE '/tmp/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, age, email);
网趣购物系统静态版支持网站一键静态生成,采用动态进度条模式生成静态,生成过程更加清晰明确,商品管理上增加淘宝数据包导入功能,与淘宝数据同步更新!采用领先的AJAX+XML相融技术,速度更快更高效!系统进行了大量的实用性更新,如优化核心算法、增加商品图片批量上传、谷歌地图浏览插入等,静态版独特的生成算法技术使静态生成过程可随意掌控,从而可以大大减轻服务器的负担,结合多种强大的SEO优化方式于一体,使
- 要求 MySQL 有文件读取权限(或使用
LOCAL关键字配合客户端支持) - 需确保字段分隔符、换行符、引号格式与文件实际一致
- 可配合
IGNORE或REPLACE处理重复主键/唯一键冲突
结合事务控制提升效率
即使使用批量 INSERT,若每条语句自动提交,仍会频繁刷盘。显式事务能大幅减少 I/O:
START TRANSACTION;
INSERT INTO logs (msg, created_at) VALUES
('error-1', NOW()), ('warn-1', NOW()), ('info-1', NOW());
INSERT INTO logs (msg, created_at) VALUES
('error-2', NOW()), ('warn-2', NOW());
COMMIT;
- 建议每 1000–5000 行提交一次,平衡内存占用与崩溃恢复成本
- 避免超长事务导致锁表时间过久或 binlog 过大
- 注意:MyISAM 不支持事务,但也能通过禁用索引(
ALTER TABLE ... DISABLE KEYS)优化
用 INSERT ... SELECT 实现表间批量复制
从已有表中筛选并插入到目标表,适合 ETL 场景或数据归档:
INSERT INTO archive_orders (order_id, amount, status, archived_at)
SELECT id, total, 'done', NOW()
FROM orders WHERE status = 'completed' AND created_at
- 支持
WHERE、JOIN、函数计算等复杂逻辑 - 可加
ON DUPLICATE KEY UPDATE处理目标表已存在记录的情况 - 大数据量时建议加索引加速源表过滤,必要时分批执行(如按 ID 范围)









