Mysql

自增主鍵的巨大差距

  • November 24, 2018

我有帶有自動增量主鍵的普通 InnoDB 表。大約有10萬條記錄。不小心被保存了ID為1000萬的記錄。其他記錄在這一行繼續。是否有任何可能且安全的解決方案:

A)將一些IDS(從1000萬開始的行)從較少的行更改為最大ID?Off course 也需要更改國外的IDS。B)開始填補10萬到1000萬之間的空白?

我想要它,因為它具有更好的可讀性。

  1. 找到所有帶有 ID 的表(FOREIGN KEYs等)。找出下面的確切數字(我把你的 10M 和 100K 當作準確的數字。)
  2. 將您的應用程序“關閉”。
  3. 禁用FOREIGN KEYS
  4. 為每個這樣的表執行UPDATE tbl SET x_id = x_id - 9900000 WHERE x_id >= 10000000;
  5. 使能夠FOREIGN KEYS
  6. ALTER TABLE ... AUTO_INCREMENT = ...(或以其他方式確保它被降低)
  7. 恢復您的應用程序。

在開始整個任務之前進行試驗是明智的。如果你有一個測試平台,就在那裡做這一切。如果不…

限制損壞(用於測試): WHERE x_id >= 10000000 AND x_id < 10000010 LIMIT 11- 然後檢查更改的行數是否不超過 10。並驗證對這些使用者的所有操作是否仍然正常。你仍然必須完成所有 6 個步驟,但如果有什麼東西壞了,你需要清理的傷害會更小。而且,在做這個小測試時,你會(希望)找出所有UPDATEs需要的東西。

為了更加大膽,… 不要禁用/啟用 FK。相反,要弄清楚執行順序是什麼UPDATEs,這樣 FK 就不會抱怨了。VerfiyCASCADEs將做你需要的。這也讓您更有信心正確修復這些值;也就是說,沒有任何懸空搞砸了 FK。

(一個警告——8.0AUTO_INCREMENT的處理方式發生了變化;我的步驟可能會有所改變。)

作為 Postlog,問問自己 FK 是更多的好處還是更多的痛苦。

引用自:https://dba.stackexchange.com/questions/223254