2012-07-09 15 views
2

我最近在INNODB數據庫中遇到了一些鎖問題,導致由於鎖爭用導致非常輕量級(一行更新)語句被關閉。Mysql INSERT IGNORE可以發生什麼錯誤,實際上可以忽略?

我知道,通過使用INSERT IGNORE,可以忽略基於約束的錯誤,例如UNIQUE KEY衝突。但INSERT IGNORE可以處理更嚴重的數據庫錯誤,例如「超出鎖定等待超時」嗎? 同樣,INSERT IGNORE在被mysql的死鎖解決方案殺死的情況下會如何反應?

最終我需要更好地理解哪個查詢持有如此多的鎖以阻止這個語句成功。我已經添加了一些調試代碼來做到這一點。

但是在此期間,我希望使用UPDATE LOW_PRIORITY來解決此問題,但它在INNODB上不受支持。

任何幫助讚賞

回答

0

我相信所有的錯誤都被忽略。從the manual

如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視爲警告。

它使用鍵違規作爲被忽略的錯誤的示例,但該語言似乎表明IGNORE關鍵字覆蓋的範圍更廣。這與同一頁面上的其他措辭一致(強調):

REPLACE是插入忽略中包含重複的舊行唯一鍵值新行處理對方:新行是用於替換舊的行而不是被丟棄。

換句話說,如果忽略錯誤是一個獨特的鍵約束違反,則執行該語句的一部分替換。這表明(對我來說,至少)其他錯誤,同時也被忽略,不會觸發執行REPLACE子句。

相關問題