Mysql INSERT IGNORE有什么错误,实际上忽略了什么?

时间:2012-07-09 00:09:44

标签: mysql insert innodb

我最近在INNODB数据库上遇到了一些锁定问题,导致一个非常轻量级(一行更新)的语句由于锁争用而被终止。

我知道通过使用INSERT IGNORE,您可以忽略基于约束的错误,例如UNIQUE KEY冲突。但INSERT IGNORE是否也可以处理更严重的数据库错误,例如“锁定等待超时超时”? 同样,INSERT IGNORE如何在它被mysql的死锁解决方案杀死的情况下做出反应?

最终,我需要更好地了解哪个查询持有如此多的锁以阻止此语句成功。我已经添加了一些调试代码来执行此操作。

但与此同时我本来希望使用UPDATE LOW_PRIORITY来解决这个问题,但它在INNODB上不受支持。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

我相信所有错误都会被忽略。来自the manual

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。

它使用密钥违规作为忽略的错误示例,但该语言似乎表明IGNORE关键字涵盖了更广泛的内容。这与同一页面上的其他措辞一致(强调增加):

  

REPLACE是INSERT IGNORE 在处理包含复制旧行的唯一键值的新行时的对应物:新行用于替换旧行而不是被丢弃。

换句话说,如果忽略的错误是唯一的键约束违规,则执行语句的REPLACE部分。这表明(至少对我而言)其他错误虽然也被忽略,但不会触发REPLACE子句的执行。