2016-09-22 113 views
-1

我有一個有3000個條目的表格。 我隨機選擇25個轉移到另一個表。 完成此操作後,我希望原始表中的ID(被分配AUTO_INCREMENT並且是主鍵)順序排列,以便我可以執行下一次迭代。 我該怎麼做?刪除幾條記錄後如何在MySQL中重新排序AUTO_INCREMENT ID?

+0

因此原始表格中的條目在移動之後被刪除? –

+3

不要。這個問題可能每天都會被問到。答案是「不要這樣做」。作爲替代方法,您可以*創建一個新表,並使用新的PK自動遞增並將所有剩餘記錄移至該表。但爲什麼*?什麼讓你認爲主鍵*需要*始終是完美的順序? (提示:它不) – David

+1

你不應該。主鍵可能是另一個表中的外鍵,也需要進行更改。如果你認爲你需要這樣做,那麼你做錯了什麼。 – AbraCadaver

回答

0

我們無法將auto_increment值更改爲除當前最大值之外的其他值.Auto_Increment是一個繼續遞增的計數器,其值用於定義它的列。

將其更改爲僅高於當前最大值的值的唯一方法是手動將AUTO_INCREMENT計數器的值更改爲max(value)+1。

所以我想在這裏,你必須在刪除25條記錄後按現有Id升序排列記錄,並根據增量變量手動設置每條記錄的id值,最後將AUTO_INCREMENT計數值設置爲變量的值在最後+1。

樣品:

ALTER表T SET AUTO_INCREMENT = SOME_VALUE;

雖然建議單獨離開AUTO_INCREMENT並且避免所有這些,只是爲了使ID看起來很棒而且沒有其他可能的原因。

+1

這是解決方案的1%。另外99%的人正在追蹤所有對這些值的引用並對其進行調整,並清除由此產生的混亂情況。 – tadman