Dan Tao Asked: 2012-10-11 15:39:50 +0800 CST2012-10-11 15:39:50 +0800 CST 2012-10-11 15:39:50 +0800 CST 如果 MAX(id) != COUNT(id),是否意味着行已被删除? 772 这个问题几乎说明了一切。我们在这里谈论的是 MySQL,版本 5.1。 我想知道的是,这是否严格意味着行已被删除,或者是否有其他可能的情况可能导致这种情况:奇怪的锁定或竞争条件等,迫使表的ID计数器为单次插入增加多次。 mysql mysql-5.1 1 个回答 Voted Best Answer ypercubeᵀᴹ 2012-10-11T16:05:41+08:002012-10-11T16:05:41+08:00 我假设您是在询问具有该AUTO_INCREMENT属性的列。 不,删除的行不是唯一的原因,还有其他几个原因: 插入未成功(由于重复的唯一键或主键违规或其他原因)。 插入未提交并已回滚的事务。 在明确定义的位置插入id(并且跳过 ID 号或添加负值)。在第二种情况下,结果可能MAX(id)少于COUNT(id)。 前一种情况的变体:列不是AUTO_INCREMENT在创建表时 - 因此在一段时间内有显式插入 - 然后进行了修改。 自动递增列的更新。 被id设置为从不同于默认值的值开始1。 服务器的 auto_increment step 设置(系统变量:)auto_increment_increment不是(或在一段时间内1已更改为其他设置)。1 和(通常被忽略的东西,因为id通常是主键),该列未定义为PRIMARY或UNIQUE键。这允许重复和另一种情况,其中MAX可以低于COUNT. 上面的一个变体是(使用 MyISAM 引擎)一个自动递增的列,它是复合主键的一部分。
我假设您是在询问具有该
AUTO_INCREMENT
属性的列。不,删除的行不是唯一的原因,还有其他几个原因:
插入未成功(由于重复的唯一键或主键违规或其他原因)。
插入未提交并已回滚的事务。
在明确定义的位置插入
id
(并且跳过 ID 号或添加负值)。在第二种情况下,结果可能MAX(id)
少于COUNT(id)
。前一种情况的变体:列不是
AUTO_INCREMENT
在创建表时 - 因此在一段时间内有显式插入 - 然后进行了修改。自动递增列的更新。
被
id
设置为从不同于默认值的值开始1
。服务器的 auto_increment step 设置(系统变量:)
auto_increment_increment
不是(或在一段时间内1
已更改为其他设置)。1
和(通常被忽略的东西,因为
id
通常是主键),该列未定义为PRIMARY
或UNIQUE
键。这允许重复和另一种情况,其中MAX
可以低于COUNT
.上面的一个变体是(使用 MyISAM 引擎)一个自动递增的列,它是复合主键的一部分。