带编号的MySQL自动增量问题

时间:2012-03-17 04:35:59

标签: mysql database primary-key

我的数据库中有一个包含大约5米记录的表,我注意到每个记录的ID都没有按每个插入递增1。

例如,我有以下架构设置:

MY_TABLE activity_id INT(11)PRIMARY(AUTO_INCREMENT),created_at DATETIME

如果我查看表并按日期时间排序,则数字不是连续的。实际上,当有删除时,MySQL正在寻找,然后在那里添加新记录。

Edit    Delete  5000089     2012-03-17 04:31:46
Edit    Delete  5000087     2012-03-17 04:31:44
Edit    Delete  5000086     2012-03-17 04:31:43
Edit    Delete  5000085     2012-03-17 04:31:43
Edit    Delete  5000084     2012-03-17 04:31:31
**Edit  Delete  5000088     2012-03-17 04:31:30**
**Edit  Delete  5000076     2012-03-17 04:31:30**
Edit    Delete  5000082     2012-03-17 04:31:29

正如你可以看到的那样,格林尼治标准时间4点31分,我们有2个插入,它应该有83和84,但它的增量很奇怪。应用程序中的数据库插入未指定ID,而activity_id的字段设置为Auto_increment。

为什么会发生这种情况会有很大的帮助。

以前有人见过这样的事吗?

1 个答案:

答案 0 :(得分:1)

auto-increment documentation有这一段:

  

在这种情况下(当AUTO_INCREMENT列是a的一部分时)   多列索引),如果删除,则重复使用AUTO_INCREMENT值   任何组中具有最大AUTO_INCREMENT值的行。这个   甚至对于具有AUTO_INCREMENT值的MyISAM表也会发生   通常不会被重复使用。

似乎暗示索引值会在InnoDB表中重复使用,在某些情况下会在MyISAM表中重复使用。因此,如果删除一行,MySQL有可能使用旧行的ID创建一个新行。