2012-02-23 54 views
4

我有一個超過17000行的mysql表格。我從中間刪除了大約530行。現在每行都有一個連續的AUTO-INCREAMENTED數字主鍵。正如你現在可以理解的,現在幾行數字已被刪除。所以我只是想問,有沒有辦法以一種完美的順序再次修復所有的行?在我們刪除了一些mysql表格後,修復了mysql表格ID

+0

我只是想知道爲什麼你需要做到這一點?無論如何,除非您的櫃檯即將達到極限,否則'id'列中的空白是如何的[呃,因爲您應該開始考慮使用GUID]。 – Fr0zenFyr 2013-09-13 13:37:00

回答

17

您可以但要小心使用這個主鍵作爲外鍵

SET @count = 0; 
UPDATE table SET table.id = @count:= @count + 1; 

其他表的這將更新表tableid列...然後需要重置AUTO_INCREMENT:

ALTER TABLE table AUTO_INCREMENT = 1; 

這將重置下一個ID是從docsMAX(id)+1

要更改AUTO_INCREMENT計數器的值將用於新 行,這樣做:

ALTER TABLE t2 AUTO_INCREMENT = value; 

您可以將計數器不重置爲小於或等於任何 已經值用過的。對於MyISAM,如果該值小於或等於 當前在AUTO_INCREMENT列中的最大值,該值 重置爲當前最大加一

+0

非常感謝你@manseUK – 2012-02-23 15:58:33

+0

+1很棒的班輪查詢。我只是想知道爲什麼有人需要這樣做?無論如何,除非您的櫃檯即將達到極限,否則'id'列中的空白是如何的[呃,因爲您應該開始考慮使用GUID]。 – Fr0zenFyr 2013-09-13 13:35:19

+0

在ID爲外鍵的情況下,該代碼可以在相同時間應用於其他表格,還有其他風險嗎? 「其他表」對我來說不是問題。 – 2017-03-27 02:50:40