如何在MySQL中进行批量插入

Gen*_*nik 125 mysql sql database insert

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

nie*_*aki 273

来自MySQL手册

使用VALUES语法的INSERT语句可以插入多行.为此,请包含多个列值列表,每个列值都括在括号内并用逗号分隔.例:

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

  • 请注意,虽然问题标记为"如何做*批量*插入",但这个答案实际上是*批量*插入.批量通常更快,请参阅[此问题](http://stackoverflow.com/questions/11389449/performance-of-mysql-insert-statements-in-java-batch-mode-prepared-statements-v) (11认同)
  • 这比Load Data Infile慢吗? (7认同)
  • @Loffman的[此SO答案](http://stackoverflow.com/a/3536148/1554982),@ Koffeehaus Per可以插入的值/行数受[`max_allowed_pa​​cket]](http:// dev .mysql.com / doc / refman / 5.1 / en / server-system-variables.html#sysvar_max_allowed_pa​​cket) (2认同)

Kam*_*ran 22

大多数情况下,您不在MySQL客户端中工作,您应该使用适当的API批量插入.

例如在JDBC中:

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();
Run Code Online (Sandbox Code Playgroud)

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

  • 关于批量插入的一个很好的博客条目(在Java中,但它与任何语言相关):http://viralpatel.net/blogs/batch-insert-in-java-jdbc/ (4认同)

jan*_*wen 7

Insert into table(col1,col2) select col1,col2 from table_2;
Run Code Online (Sandbox Code Playgroud)

请访问:http://dev.mysql.com/doc/refman/5.5/en/insert.html


小智 5

加载数据infile查询是更好的选择,但像godaddy这样的服务器在共享主机上限制了这个选项,因此,只剩下两个选项,然后一个是每次迭代或批量插入时插入记录,但是如果查询超出此值,则批量插入具有字符限制在mysql中设置的字符数,那么你的查询会崩溃,所以我建议在批量插入的块中插入数据,这将最大限度地减少与database.best运气家伙建立的连接数量

  • 怎么样`LOAD DATA LOCAL INFILE '/users/name/txt.file'` (2认同)