【问题标题】:Is there any special reason why a SQL AI index increases on a failed insert?插入失败时 SQL AI 索引增加是否有任何特殊原因?
【发布时间】:2016-03-21 16:44:09
【问题描述】:

例如,如果我给一个表的列一个唯一的属性,它需要在该列上输入一些东西才能执行插入查询。如果我尝试在没有该列数据的情况下进行插入,导致它失败,那么下次插入成功时,AI 列索引将增加失败的额外次数。

这意味着无论插入是否成功,SQL 都会增加该索引。有什么理由这样做吗?

【问题讨论】:

  • 也许比抱歉更安全(有很多数字!)
  • 可能由多种原因引起。这是一个众所周知的差距问题。 InnoDB Record, Gap, and Next-Key Locks 与日志相关,以及引擎的内部结构
  • 现在,如果您想着手“解决”这个问题,还有很多事情摆在您面前,而且已经浪费了很多时间。然后想知道,我为什么要打扰。

标签: mysql sql insert innodb auto-increment


【解决方案1】:

INSERT 启动时,它会计算要插入的行数,并按该数量影响 AI。然后它将它们分配给行。如果无法插入一行(dup key、ROLLBACK 等),那么 AI 值已经分配好了。它现在被“烧毁”了。

注意...有一种情况可以重用 AI:DELETE 具有最高 AI 的行,停止并重新启动 mysqld,然后下一个 INSERT 将重用该 ID。这是因为重新打开表会查找MAX(id)+1 以知道接下来要使用什么号码。

【讨论】:

    【解决方案2】:

    MySQL documentation中查看innodb_autoinc_lock_mode的文档

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2010-12-21
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2016-06-17
      相关资源
      最近更新 更多