簡體   English   中英

無法在MySQL中重置AUTO_INCREMENT?

[英]Unable to reset AUTO_INCREMENT in MySQL?

我在MySQL中有一個表,該表具有997653行,但是刪除了幾行后,現在是994332行。 但是,ID列的最后一個數字仍然是997653。如何重置它以重新計數列?

我已經嘗試過ALTER TABLE foo AUTO_INCREMENT=1; 但這沒有用。

這是重新播種的正確語法,但是您永遠不應重新設定auto_increment列值。 是的,一旦刪除行, auto_increment值將繼續使用下一個值,但這不會對您的表或對該表進行的查詢產生任何影響。

如果有問題,您甚至可以考慮執行軟刪除,而不是執行硬delete from...語句中delete from...

如果表引擎是InnoDB,那么足以重啟MySQL服務(如果在您的設置中可能的話)。

InnoDB表引擎不在任何地方存儲自動增量值。 服務器啟動時,它將查找表中存在的最大值(這很容易, AUTO_INCREMENT列始終是表的PK ),對其進行遞增,這是它在下一個INSERT上使用的新值。

文檔中對此進行了解釋:

如果為InnoDB表指定AUTO_INCREMENT列,則InnoDB數據字典中的表句柄將包含一個稱為自動增量計數器的特殊計數器,該計數器用於為該列分配新值。 該計數器僅存儲在主存儲器中,而不存儲在磁盤上。

要在服務器重啟后初始化自動遞增計數器, InnoDB在包含AUTO_INCREMENT列的表中的第一個插入處執行以下語句的等效項。

 SELECT MAX(ai_col) FROM table_name FOR UPDATE; 

InnoDB遞增該語句檢索的值,並將其分配給表的列和自動遞增計數器。 默認情況下,該值增加1

暫無
暫無

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

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