如果 MAX(id) != COUNT(id),这是否意味着行已被删除?

Dan*_*Tao 5 mysql auto-increment mysql-5.1

这个问题几乎说明了一切。我们在这里谈论 MySQL,版本 5.1。

我想知道的是这是否严格意味着行已被删除,或者是否有其他可能的情况可能导致这种情况:奇怪的锁定或竞争条件等,迫使表的ID计数器为一次插入多次递增。

ype*_*eᵀᴹ 10

我假设您正在询问有关该AUTO_INCREMENT属性的列。

不,删除的行不是唯一的原因,还有其他几个原因:

  • 未成功的插入(由于重复的唯一键或主键违规或其他原因)。

  • 在未提交并回滚的事务中插入。

  • id明确定义的地方插入(跳过 id 号或添加负值)。在第二种情况下,您可能会MAX(id)COUNT(id)结果少。

  • 前一种情况的变化:列不是AUTO_INCREMENT在创建表时 - 所以在某个时期有显式插入 - 然后被修改。

  • 自动递增列的更新。

  • id被设定为比默认的值不同的开始1

  • 服务器的 auto_increment 步骤设置(系统变量:)auto_increment_increment不是1(或已更改为其他内容,而不是1一段时间)。

  • 和(通常被忽略的东西,因为id通常是主键),该列未定义为PRIMARYorUNIQUE键。这允许重复和另一种情况,其中MAX可以低于COUNT.

  • 上面的一个变体是(使用 MyISAM 引擎)一个自动递增列,它是复合主键的一部分。