我有1到多个需要插入到表格中的记录。在查询中,最佳的方法是什么?我应该只制作一个循环,并在每次迭代中插入一条记录吗?还是有更好的方法?
摘自MySQL手册
使用VALUES语法的INSERT语句可以插入多行数据。为了实现这一点,需要包含多个列值列表,每个列表都用括号括起来,并用逗号隔开。例如:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
限制。你可以在max_allowed_packet
中找到更多信息。 - Sepster大多数情况下,您不会在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();
Insert into table(col1,col2) select col1,col2 from table_2;
请参考MySQL的INSERT语句文档。insert into select from
的性能如何?它的速度和批量插入一样快吗? - hiway使用“load data infile”查询是更好的选择,但像Godaddy这样的某些服务器在共享主机上限制了此选项,因此只剩下两个选项,一个是在每次迭代或批量插入时插入记录,但是如果您的查询超过mysql中设置的字符数限制,则查询将崩溃。因此,我建议使用批处理插入将数据分块插入,这将最小化与数据库建立的连接数量。祝大家好运。
LOAD DATA LOCAL INFILE '/users/name/txt.file'
怎么样? - double_j将以下内容插入到test_1表中:(24, 'B', '1990-12-07'), (25, 'C', '1990-12-08')
INSERT
本身支持此功能! - Lightness Races in Orbit