2012-04-17 30 views
3

我最近read由於InnoDB在服務器重新啓動時重新計算AUTO_INCREMENT的值,ID列表高端的任何記錄都可能重用其ID。如何不回收InnoDB中的auto_increment ID

通常情況下,這不是問題,因爲刪除用戶時,與ID關聯的所有內容都會從其他表中刪除。

但是我故意離開他們的論壇帖子成爲孤兒,標記爲「發佈者=用戶#123 =」,以便保留過去的對話。顯然,如果一個ID被重用,這將是一個問題。

我以前從未遇到過這個問題,因爲總是有足夠的新用戶使得ID不太可能以這種方式重用。然而,在我的新項目註冊中,很少出現頻繁的非正常用戶刪除(尤其是因爲「Open Alpha」帳戶僅作爲預覽持續三天),並且此類ID重用現在已發生三次。

我通過在其他地方爲AUTO_INCREMENT保存正確的值並使用該值而不是依賴內部值來「解決」了問題。有沒有一種真正的方式讓InnoDB記住實際的最後一個值?

+4

而不是刪除的帳戶記錄,爲什麼不明確出來,將名稱更改爲「用戶#11」,併成立了「刪除「標誌嗎?然後你保持參照完整性(並且可以使用FK),而不用擔心ID被重用。 – 2012-04-17 03:09:47

回答

1

5.5文檔建議將其他位置的自動增量值存儲爲您已有的值。

另一種解決方案是模擬一個SEQUENCE,所以你不要在實際的表本身中使用自動增量。這已經是discussed on SO beforeagainMYSQL Performance blog mentions it

另一個MySQL數據擰其他RDBMS沒有......

+1

感謝您的指針(而不是['0x3A28213A','0x6339392C','0x7363682E'變種](http://xkcd.com/138/))! – 2012-04-17 13:01:47

+0

@Kolink我不理解鏈接?他們暗示什麼 – 2012-04-17 13:05:38

+0

點擊它。這是一個笑話... – 2012-04-17 13:10:14

相關問題