2

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

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

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

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

任何帮助表示赞赏

4

1 回答 1

0

我相信所有错误都会被忽略。从手册

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

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

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

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

于 2012-07-09T00:17:00.547 回答