如何在 MySQL 中执行批量插入

我有1-许多记录,需要输入到一个表中。在查询中执行此操作的最佳方法是什么?我应该只做一个循环,每次迭代插入一条记录吗?还是有更好的办法?

357264 次浏览

来自 MySQL 手册

使用 VALUES 的 INSERT 语句 语法可以插入多行 包含多个列列表 值,每个值包含在 括号,用逗号分隔。 例如:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Mysql 允许您一次插入多行 插入手册

Insert into table(col1,col2) select col1,col2 from table_2;

请参阅 关于 INSERT 语句的 MySQL 文档

大多数情况下,您不是在 MySQL 客户机中工作,应该使用适当的 API 将插入批处理在一起。

比如京东:

connection con.setAutoCommit(false);
PreparedStatement prepStmt = con.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
prepStmt.setString(1,mgrnum1);
prepStmt.setString(2,deptnum1);
prepStmt.addBatch();


prepStmt.setString(1,mgrnum2);
prepStmt.setString(2,deptnum2);
prepStmt.addBatch();


int [] numUpdates=prepStmt.executeBatch();

Http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm

加载数据文件查询是一个更好的选择,但是一些服务器,比如 Godaddy,限制了这个选项在共享主机上的使用,所以,只剩下两个选项,然后一个是在每次迭代或批量插入时插入记录,但是批量插入有它的字符限制,如果你的查询超过 mysql 中设置的字符数量,那么你的查询就会崩溃,所以我建议使用批量插入将数据插入到块中,这样可以最小化与 database 建立

插入 test _ 1值(24,‘ B’,‘1990-12-07’) ,(25,‘ C’,‘1990-12-08’) ;