Mysql
自增主鍵的巨大差距
我有帶有自動增量主鍵的普通 InnoDB 表。大約有10萬條記錄。不小心被保存了ID為1000萬的記錄。其他記錄在這一行繼續。是否有任何可能且安全的解決方案:
A)將一些IDS(從1000萬開始的行)從較少的行更改為最大ID?Off course 也需要更改國外的IDS。B)開始填補10萬到1000萬之間的空白?
我想要它,因為它具有更好的可讀性。
- 找到所有帶有 ID 的表(
FOREIGN KEYs
等)。找出下面的確切數字(我把你的 10M 和 100K 當作準確的數字。)- 將您的應用程序“關閉”。
- 禁用
FOREIGN KEYS
- 為每個這樣的表執行
UPDATE tbl SET x_id = x_id - 9900000 WHERE x_id >= 10000000;
。- 使能夠
FOREIGN KEYS
- 做
ALTER TABLE ... AUTO_INCREMENT = ...
(或以其他方式確保它被降低)- 恢復您的應用程序。
在開始整個任務之前進行試驗是明智的。如果你有一個測試平台,就在那裡做這一切。如果不…
限制損壞(用於測試):
WHERE x_id >= 10000000 AND x_id < 10000010 LIMIT 11
- 然後檢查更改的行數是否不超過 10。並驗證對這些使用者的所有操作是否仍然正常。你仍然必須完成所有 6 個步驟,但如果有什麼東西壞了,你需要清理的傷害會更小。而且,在做這個小測試時,你會(希望)找出所有UPDATEs
需要的東西。為了更加大膽,… 不要禁用/啟用 FK。相反,要弄清楚執行順序是什麼
UPDATEs
,這樣 FK 就不會抱怨了。VerfiyCASCADEs
將做你需要的。這也讓您更有信心正確修復這些值;也就是說,沒有任何懸空搞砸了 FK。(一個警告——8.0
AUTO_INCREMENT
的處理方式發生了變化;我的步驟可能會有所改變。)作為 Postlog,問問自己 FK 是更多的好處還是更多的痛苦。