2012-06-04 38 views
2

我有一個表:測試Mysql的MyISAM數據重新使用被刪除的自動遞增的ID

ID INT(10)自動遞增 名稱char(36)

現在讓我們說,我的整個表它從ID 1000 =>最大唯一ID號填充。 Id 1 - 1000 =先前刪除。

問題1;將MySQL重新使用這些刪除的ID的? 問題2;如果沒有,我該如何去自動遞增或重新使用表中不存在的唯一標識符?

我問的原因是我的表格將包含很多條目,並且很多條目將一直被刪除。當使用自動增量時,「我用盡了ID」會發生什麼?

感謝有這方面的啓蒙:)

-Tom

回答

0

你需要重新設置自動增量,自動增量不斷遞增,也不會回去,至少,如果你不設置它。

alter table tablename auto_increment=value 

這樣

mysql> alter table t1 auto_increment=200; 
Query OK, 202 rows affected (0.04 sec) 
Records: 202 Duplicates: 0 Warnings: 0 

編輯: 如果你刪除了一些記錄,AUTO_INCREMENT的將是「最後的值+ 1」,它不會不管你做什麼,只要你刪除全桌,你將能夠'重新開始'。

最好是有一個觸發器,但觸發器不能更改表(http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

所以你的最後一個選項是一個存儲過程到這裏看看:Is it possible to alter a table in mySql via stored procedures?

不推薦哪。

+0

好吧,但任何方式來設置它來做到這一點自動?並且在復位後自動遞增時是否會跳過現有的ID? – Tom

1
  1. 沒有,MySQL不會從刪除的記錄
  2. 你真的需要重複使用的ID?如果您的自動增量列的類型是BIGINT,你有可能18446744073709551615個編號
+0

哈哈..我只是想知道..試圖看看我的選擇。 – Tom

3
  1. WILL的mysql重新使用這些已刪除的id?

    mysqld時開始,它通過查找最大現任記錄(並加入1)確定用於每列AUTO_INCREMENT的下一個值。因此,如果刪除具有最高值的記錄並重新啓動服務器,則刪除的ID確實會被重用。

    否則,值將僅在您手動改變未來AUTO_INCREMENT值重複使用(這是推薦,因爲它是不是併發安全):

    ALTER TABLE foo AUTO_INCREMENT = 12345; 
    
  2. 如果不是,怎麼我開始自動遞增或重新使用表中不存在的唯一標識符?

    一般來說,你不:考慮重新設計你的數據結構,使插入/刪除不會以這種方式發生,或者使用一個更大的整數類型(BIGINT UNSIGNED爲8個字節,所以可以達到2^64或〜10^19)。

  3. 當我使用自動增量時,「我用盡了ID」會發生什麼?

    正如the manual說:

    使用的AUTO_INCREMENT列,它是大到足以容納你需要的最大序列值的最小整數數據類型。當列達到數據類型的上限時,下一次生成序列號的嘗試失敗。