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