【问题标题】:What errors can Mysql INSERT IGNORE, actually ignore?Mysql INSERT IGNORE,实际上可以忽略哪些错误?
【发布时间】:2012-07-09 00:09:43
【问题描述】:

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

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

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

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

任何帮助表示赞赏

【问题讨论】:

    标签: mysql insert innodb


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      最近更新 更多