2012-03-17 95 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創建一個新行。