2010-09-10 51 views
0

我想知道除了AUTO_INCREMENT之外,讓表自動設置ID的最簡單方法是什麼。有沒有簡單的方法來保持MySQL行id不增長?

我有一張桌子,可以在很長一段時間內積累數千行。其中一些行將在稍後被刪除。我如何獲得新的行以獲得最低的可用ID,而無需手動完成。

我可以在每次有人添加一行時重置AUTO_INCREMENT嗎?

+2

你爲什麼要這樣做?它可能很好地解決了以前對舊的,現在刪除的數據的查詢。 – BoltClock 2010-09-10 09:59:50

+1

我很好奇 - 爲什麼你需要連續的ID沒有差距? – 2010-09-10 10:00:16

+0

你不應該那樣做。這些問題應該在一些常見問題條件下被關閉。關於這樣一個基本概念誤解太多的討論 – 2010-09-10 12:27:30

回答

0

它可以自動遞增重置爲下一個可能的ID:

ALTER TABLE table_name AUTO_INCREMENT = 1 

您甚至不必將它設置爲下一個可用的關鍵。 MySQL將在下一次更新時自動採用下一個密鑰。所以即使每次設置爲「1」都是安全的。

但是,如果你不關心ID爲什麼你甚至使用ID?甚至大量的ID也不是問題。我得到了一張擁有超過2000萬條目的表格,並且從來沒有遇到問題。

+0

爲什麼人們總是在不解釋他們的情況下就OP問題回答投票可能的答案? – 2ndkauboy 2010-09-10 12:30:54

+0

我投了你的回覆並標上正確的答案。我知道這很少需要,我應該通過其他方式解決,但開發人員必須知道不良做法才能避免它們。其他任何事情都是愚蠢的。 – Hubro 2010-09-10 19:06:47

+0

我需要這個的原因是,這個特定的表可能會接收到數百萬行,但一次不一定包含數十或數百行。在這種情況下,看起來有點矯枉過正,以致數以百萬計的ID。 但是,謝謝你的回覆! – Hubro 2010-09-10 19:26:10

4

坦率地說,這是不值得的麻煩。我相信它是可能的,但它只是一天結束時的唯一標識符 - 無論它是1還是1000都無關緊要。

如果是出於其他目的,請考慮使用其他字段。

國際海事組織你不應該混淆索引。

2

不可能的,一個ID都是唯一的,使用一次..

僅當您清空表。

+1

這是錯誤的。它只能同時使用一次,但如果您刪除了一個條目,它可能會再次使用。 – 2ndkauboy 2010-09-10 12:11:29

+0

right @ Kau-Boy :) – 2010-09-10 12:16:05

+0

@Kau不,你錯了。如果一個人的孩子會死,而他們又生了另一個孩子,那麼即使以第一個名字命名,它仍然是另一個孩子。你誤解了獨特的識別概念。 – 2010-09-10 12:24:15

1

誰在乎?一個integer可以有數十億的唯一值,它們都花費相同數量的內存(每個4字節)。用主鍵賭博就像俄羅斯輪盤賭到你的數據庫:最後你的數據庫會死(它被損壞)。

0

我想你可以使用觸發器,但這可能會在一段時間後變成一個巨大的混亂。不明白你爲什麼不想使用auto_increment,你有什麼特別的原因嗎?

Triggers in MySQL 5.0

@Jordy:你這話並不盡然,是隻有一個行可以有,在任何給定的點值,但是如果你刪除行仍可以重用針對另一行刪除值。您也可以將計數器重置爲任意值,包括增量而不刪除表格。

相關問題