贝利信息

如何插入多条数据_mysql批量插入技巧

日期:2026-01-22 00:00 / 作者:P粉602998670
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');

利用 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);

结合事务控制提升效率

即使使用批量 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;

用 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