2010-07-29 69 views
1

我有一個表與自動增量字段,我有例如1,2,3的值,當我插入4並刪除它,下一個通常會是5.我刪除5和很長時間後,說1當我插入新紀錄時,下一個是再次4.MySQL的自動增量問題

有人可以告訴我爲什麼會發生這種情況,爲什麼當我長時間插入一個新的記錄後,它獲取該表的最後一個插入的ID,並沒有採取考慮刪除的記錄。

PS:出現這種情況只是時間長了以後,它正在確定,當我在時間

+3

任何運行在您的表上的CRON任務? – 2010-07-29 07:45:27

+0

我自己並沒有啓動任何cron,但是這是在付費託管,所以他們可能會做出一些調整? – Centurion 2010-07-29 07:48:52

+1

是否有可能在任何時候備份/恢復數據庫,可能是缺少或過期的AUTO_INCREMENT值?或者,是多列索引的AUTO_INCREMENT列部分?請參閱[使用AUTO_INCREMENT](http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html) - 具體地說,關於多列索引的部分。 – Mike 2010-07-29 08:06:49

回答

5

一個表列的最後一個自動遞增值僅存儲在內存中短期內這樣做。它不寫入表格或其他東西。因此,如果您重新啓動服務器(即進行備份),最後一個增量值(5)將丟失,並且mysql會掃描該表以查找表(4)中存在的最後一個值。

+0

是的,你是對的,我不相信它,並在本地主機上測試,它是這樣的,謝謝,但有沒有解決這個問題,以重新啓動服務器後保持刪除id? – Centurion 2010-07-29 09:01:04

+2

我認爲mysql觸發器,存儲過程和最後一個表的一個組合可能是一個解決方案。這樣你就可以建立你自己的ai功能。但是我之前用mysql更新過。 – shod 2010-07-29 09:44:23

+0

好吧,對於那些遇到這個問題的人來說,這只是InnoDB表的問題,所以我最簡單的解決方案是刪除一個新的字段,但這樣你應該通過所有的應用程序和改變的東西,其他的解決方案可能是一些鞋,再次感謝問題解決。 順便說一下,當我閱讀文檔時,還沒有對字段或表本身進行一些調整的解決方案。 – Centurion 2010-07-29 09:51:52