0
我有如下表CL:批量插入与重复键更新
id - int(10) primary key
contact - int(10)
list - int(10)
随着接触和列表中的唯一索引。当我同时运行了100条记录批量以下查询:
INSERT INTO cl(list, contact) VALUES (?, ?) ON DUPLICATE KEY UPDATE cl.id = cl.id
在高压下它在大约20%失败,出现以下错误:查询
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ON DUPLICATE KEY UPDATE cl.id = cl.id' at line 1
80%,运行良好。当我用相同的参数重新运行失败的查询时,又有20%失败。
为什么某些查询失败,然后在第二次执行时不会产生错误?
我认为你的sql没有意义(不以粗鲁的方式)....我认为你应该这样做,例如,如果你想更新列表,那么:'INSERT INTO cl(列表,联系人)VALUES(?,?)ON DUPLICATE KEY UPDATE list =?'...或者如果你想更新联系人,那么你应该尝试:INSERT INTO cl(list,contact)VALUES(?,?)ON DUPLICATE KEY UPDATE contact =?'...或者如果你想同时更新:'INSERT INTO cl(list,contact)VALUES(?,?)ON DUPLICATE KEY UPDATE list =?,contact =?'...... – Hackerman
这个想法不会改变表中已有的记录。在任何情况下,失败都不是由于存在重复的事实:查询运行时,表中没有具有相同键的记录。 – alniks
但是我还是不明白...''on key duplicate update''主要用于传递id作为参数时,如:'INSERT INTO cl(id,list,contact)VALUES(?,?,? )在重复密钥更新cl.id = cl.id' ...你没有通过身份证,如果该身份证也是自动增量,那么你应该永远不会去达到关键更新部分..... – Hackerman