簡體   English   中英

Mysql Myisam重新使用已刪除的自動遞增的ID

[英]Mysql Myisam re-using auto-incremented ids that are deleted

我有一張桌子:測試

id int(10)自動遞增名稱char(36)

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

問題1; mysql會重新使用這些刪除的id嗎? 問題2; 如果不是,我該如何進行自動遞增或重復使用表中不存在的唯一標識符?

我問的原因是,我的表將包含許多條目,並且所有條目都會一直被刪除。 當我使用自動遞增功能時,“編號不足”會發生什么?

感謝您的啟發:)

-Tom

  1. mysql會重新使用這些刪除的id嗎?

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

    否則,只有在您手動更改下一個AUTO_INCREMENT值時才可以重用這些值( 建議這樣做,因為它不是並發安全的):

     ALTER TABLE foo AUTO_INCREMENT = 12345; 
  2. 如果不是,我該如何進行自動遞增或重復使用表中不存在的唯一標識符?

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

  3. 當我使用自動遞增功能時,“編號不足”會發生什么?

    手冊所述

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

  1. 不,MySQL不會重復使用已刪除記錄中的ID
  2. 您真的需要嗎? 如果您的自動增量列的類型為BIGINT,則您有18446744073709551615可能的ID

您需要重置自動增量,自動增量只是保持增量,並且至少在沒有設置的情況下不會返回。

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

因此,您的最后一個選擇是存儲過程,請看這里: 是否可以通過存儲過程在mySql中更改表?

不建議這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM