我的数据库中有一个包含大约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。
为什么会发生这种情况会有很大的帮助。
以前有人见过这样的事吗?
答案 0 :(得分:1)
auto-increment documentation有这一段:
在这种情况下(当AUTO_INCREMENT列是a的一部分时) 多列索引),如果删除,则重复使用AUTO_INCREMENT值 任何组中具有最大AUTO_INCREMENT值的行。这个 甚至对于具有AUTO_INCREMENT值的MyISAM表也会发生 通常不会被重复使用。
似乎暗示索引值会在InnoDB表中重复使用,在某些情况下会在MyISAM表中重复使用。因此,如果删除一行,MySQL有可能使用旧行的ID创建一个新行。