[英]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
mysql會重新使用這些刪除的id嗎?
mysqld
啟動時,它將通過查找現有記錄的最大值(並加1)來確定每個AUTO_INCREMENT
列的下一個值。 因此,如果您刪除具有最高值的記錄並重新啟動服務器,則刪除的ID確實會被重用。
否則,只有在您手動更改下一個AUTO_INCREMENT
值時才可以重用這些值( 不建議這樣做,因為它不是並發安全的):
ALTER TABLE foo AUTO_INCREMENT = 12345;
如果不是,我該如何進行自動遞增或重復使用表中不存在的唯一標識符?
一般來說,您不會:考慮重新設計數據結構,以免插入/刪除不以這種方式發生,或者使用更大的整數類型( BIGINT UNSIGNED
為8字節,因此最多可以為2 ^ 64或〜10 ^ 19)。
當我使用自動遞增功能時,“編號不足”會發生什么?
對
AUTO_INCREMENT
列使用最小的整數數據類型,該數據類型應足夠大以容納所需的最大序列值。 當列達到數據類型的上限時,下一次生成序列號的嘗試將失敗。
您需要重置自動增量,自動增量只是保持增量,並且至少在沒有設置的情況下不會返回。
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.