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