2016-09-22 139 views
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%失败。

为什么某些查询失败,然后在第二次执行时不会产生错误?

+0

我认为你的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

+0

这个想法不会改变表中已有的记录。在任何情况下,失败都不是由于存在重复的事实:查询运行时,表中没有具有相同键的记录。 – alniks

+0

但是我还是不明白...''on key duplicate update''主要用于传递id作为参数时,如:'INSERT INTO cl(id,list,contact)VALUES(?,?,? )在重复密钥更新cl.id = cl.id' ...你没有通过身份证,如果该身份证也是自动增量,那么你应该永远不会去达到关键更新部分..... – Hackerman

回答

0

更改查询

INSERT IGNORE INTO cl(list, contact) VALUES (?, ?) 

解决的问题。虽然目前还不清楚为什么mysql抛出java.sql.SQLSyntaxErrorException而不是更明确的东西。