2012-03-17 60 views
0

我在我的数据库中有一个大约5m记录的表,并且我注意到每个记录的ID都不是每增加一个插入。MySQL的自动递增问题编号

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

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分30秒格林尼治标准时间看,我们有2个刀片,它应该有83和84,但其古怪递增。来自应用程序的数据库插入不指定ID,并且activity_id的字段设置为Auto_increment。

任何帮助都会非常有用,为什么会发生这种情况。

有没有人看到过这样的事情?

+0

只是好奇,但为什么它们与日期不连续? – Robert 2012-03-17 04:55:31

+0

我们应该假设datetime值是由mysql中的NOW()生成的,还是由一组独立的clent应用程序生成的? – newtover 2012-03-17 20:52:51

回答

1

auto-increment documentation有这样一段话:

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

它似乎意味着索引值可以在InnoDB表中重用,在某些情况下可以在MyISAM表中重用。所以,如果你删除一行,MySQL有可能会用旧行的ID创建一个新行。