如果您在mysql中有幾個表,並帶有外鍵ans,並且某些自動遞增計數器有一些間隙(條目已在「中間」表),是否有任何簡單的方法來「修復」計數器,以便沒有任何差距?如何在mysql中「重置」自動遞增計數器
因此,從ID = {1,10,11,40}去ID = {1,2,3,4}
THX。
如果您在mysql中有幾個表,並帶有外鍵ans,並且某些自動遞增計數器有一些間隙(條目已在「中間」表),是否有任何簡單的方法來「修復」計數器,以便沒有任何差距?如何在mysql中「重置」自動遞增計數器
因此,從ID = {1,10,11,40}去ID = {1,2,3,4}
THX。
如果您只是更新密鑰,就有可能破壞引用完整性。所以不行,我可以說沒有寫出一段覆蓋每條記錄和更新ID的軟件,也沒有使用指向每條記錄的外鍵來更新這些實體,但這不是一個簡單的「單一命令」任務。
另外考慮到您的數據的外部消費者可能會指向您的信息,所以您需要考慮只是隨意更改密鑰的影響。
最後,你有什麼理由希望擁有連續的無間隙密鑰分配?有差距或「奇怪」的關鍵值通常不是問題。只要每個記錄的關鍵字確實是唯一的,無論它們的價值或順序如何,最好讓它們保持原樣。
如果您截斷表,這將重置計數器。但是,如果您已經有行,那麼將它重置爲0並不是一個好主意,因爲您將具有重複的ID。
如果這不是一個實時應用程序,並且您只希望您的行看起來很漂亮,請刪除該列並創建一個新列(當然,使用AUTO INCREMENT集)。
在實際操作中,您不應該期望您的行ID是連續的。
您可以使用ALTER TABLE tblname AUTO_INCREMENT = 1重置ID,但只適用於空表。
您可以在不使用ID的情況下轉儲表,刪除所有條目並使用該命令然後恢復數據。
請注意,這將打破任何參照完整性。
你不需要這樣做。 – Bozho 2010-11-28 18:59:26
即使您的自動增量按順序排列,也不是** – ajreal 2010-11-28 18:59:44