我想知道除了AUTO_INCREMENT之外,讓表自動設置ID的最簡單方法是什麼。有沒有簡單的方法來保持MySQL行id不增長?
我有一張桌子,可以在很長一段時間內積累數千行。其中一些行將在稍後被刪除。我如何獲得新的行以獲得最低的可用ID,而無需手動完成。
我可以在每次有人添加一行時重置AUTO_INCREMENT嗎?
我想知道除了AUTO_INCREMENT之外,讓表自動設置ID的最簡單方法是什麼。有沒有簡單的方法來保持MySQL行id不增長?
我有一張桌子,可以在很長一段時間內積累數千行。其中一些行將在稍後被刪除。我如何獲得新的行以獲得最低的可用ID,而無需手動完成。
我可以在每次有人添加一行時重置AUTO_INCREMENT嗎?
它可以自動遞增重置爲下一個可能的ID:
ALTER TABLE table_name AUTO_INCREMENT = 1
您甚至不必將它設置爲下一個可用的關鍵。 MySQL將在下一次更新時自動採用下一個密鑰。所以即使每次設置爲「1」都是安全的。
但是,如果你不關心ID爲什麼你甚至使用ID?甚至大量的ID也不是問題。我得到了一張擁有超過2000萬條目的表格,並且從來沒有遇到問題。
坦率地說,這是不值得的麻煩。我相信它是可能的,但它只是一天結束時的唯一標識符 - 無論它是1還是1000都無關緊要。
如果是出於其他目的,請考慮使用其他字段。
國際海事組織你不應該混淆索引。
不可能的,一個ID都是唯一的,使用一次..
僅當您清空表。
這是錯誤的。它只能同時使用一次,但如果您刪除了一個條目,它可能會再次使用。 – 2ndkauboy 2010-09-10 12:11:29
right @ Kau-Boy :) – 2010-09-10 12:16:05
@Kau不,你錯了。如果一個人的孩子會死,而他們又生了另一個孩子,那麼即使以第一個名字命名,它仍然是另一個孩子。你誤解了獨特的識別概念。 – 2010-09-10 12:24:15
誰在乎?一個integer可以有數十億的唯一值,它們都花費相同數量的內存(每個4字節)。用主鍵賭博就像俄羅斯輪盤賭到你的數據庫:最後你的數據庫會死(它被損壞)。
我想你可以使用觸發器,但這可能會在一段時間後變成一個巨大的混亂。不明白你爲什麼不想使用auto_increment,你有什麼特別的原因嗎?
@Jordy:你這話並不盡然,是隻有一個行可以有,在任何給定的點值,但是如果你刪除行仍可以重用針對另一行刪除值。您也可以將計數器重置爲任意值,包括增量而不刪除表格。
你爲什麼要這樣做?它可能很好地解決了以前對舊的,現在刪除的數據的查詢。 – BoltClock 2010-09-10 09:59:50
我很好奇 - 爲什麼你需要連續的ID沒有差距? – 2010-09-10 10:00:16
你不應該那樣做。這些問題應該在一些常見問題條件下被關閉。關於這樣一個基本概念誤解太多的討論 – 2010-09-10 12:27:30