2010-11-28 57 views
1

如果您在mysql中有幾個表,並帶有外鍵ans,並且某些自動遞增計數器有一些間隙(條目已在「中間」表),是否有任何簡單的方法來「修復」計數器,以便沒有任何差距?如何在mysql中「重置」自動遞增計數器

因此,從ID = {1,10,11,40}去ID = {1,2,3,4}

THX。

+1

你不需要這樣做。 – Bozho 2010-11-28 18:59:26

+0

即使您的自動增量按順序排列,也不是** – ajreal 2010-11-28 18:59:44

回答

3

如果您只是更新密鑰,就有可能破壞引用完整性。所以不行,我可以說沒有寫出一段覆蓋每條記錄和更新ID的軟件,也沒有使用指向每條記錄的外鍵來更新這些實體,但這不是一個簡單的「單一命令」任務。

另外考慮到您的數據的外部消費者可能會指向您的信息,所以您需要考慮只是隨意更改密鑰的影響。

最後,你有什麼理由希望擁有連續的無間隙密鑰分配?有差距或「奇怪」的關鍵值通常不是問題。只要每個記錄的關鍵字確實是唯一的,無論它們的價值或順序如何,最好讓它們保持原樣。

1

如果您截斷表,這將重置計數器。但是,如果您已經有行,那麼將它重置爲0並不是一個好主意,因爲您將具有重複的ID。

2

如果這不是一個實時應用程序,並且您只希望您的行看起來很漂亮,請刪除該列並創建一個新列(當然,使用AUTO INCREMENT集)。

在實際操作中,您不應該期望您的行ID是連續的。

0

您可以使用ALTER TABLE tblname AUTO_INCREMENT = 1重置ID,但只適用於空表。

您可以在不使用ID的情況下轉儲表,刪除所有條目並使用該命令然後恢復數據。

請注意,這將打破任何參照完整性。