可以使用一条INSERT语句插入多条记录以提升效率,语法为INSERT INTO table_name (col1, col2) VALUES (v1a, v2a), (v1b, v2b);支持通过INSERT … select从其他表批量导入数据,需注意字段顺序和数量一致、适当处理NULL值、字符串和日期加单引号,建议合并插入减少通信开销并避免超过max_allowed_packet限制。

在 mysql 中,可以使用一条 INSERT 语句插入多条记录,这样比执行多条单条插入语句更高效,能显著减少数据库的通信开销。
基本语法:INSERT INTO … VALUES
通过在 VALUES 后面列出多组括号,每组括号表示一条记录,用逗号分隔:
INSERT INTO table_name (column1, column2, column3) VALUES (value1a, value2a, value3a), (value1b, value2b, value3b), (value1c, value2c, value3c);
例如,向名为 students 的表中插入三条记录:
INSERT INTO students (name, age, class) VALUES ('张三', 18, '高三一班'), ('李四', 19, '高三二班'), ('王五', 17, '高二三班');
注意事项
使用多条记录插入时需要注意以下几点:
- 每条记录的值必须与指定的列顺序一一对应
- 所有记录必须拥有相同数量的字段值
- 如果某字段允许 NULL,可以显式写入 NULL
- 字符串和日期类型要用单引号包裹
使用 INSERT … SELECT 插入多条数据
如果要从另一个表中查询数据并插入,可以结合 SELECT 语句:
INSERT INTO students (name, age, class) SELECT name, age, class FROM temp_students WHERE status = 'approved';
这种方式适合批量迁移或复制数据。
性能建议
当需要插入大量数据时,推荐:
- 尽量合并为一次多行插入,减少 SQL 执行次数
- 避免在循环中执行单条 INSERT
- 注意单条 SQL 语句的长度不要超过 max_allowed_packet 限制
- 必要时可分批提交(如每 1000 条提交一次)
基本上就这些。合理使用多行 INSERT 能有效提升数据写入效率。


