萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 批量修改自增 ID 起始值與資料遷移實操技巧

場景:歷史資料 ID 衝突需偏移

既有表 sm_position 已有 1133 筆資料(ID 1~1133),新資料 CSV 也是從 1 開始,直接匯入會主鍵衝突。需將新資料 ID 整體偏移至 1134 起。

方法一:CSV 編輯偏移(適合一次性匯入)

  1. 將新資料匯出為 CSV。
  2. 用 Excel/試算表開啟,將 ID 欄第一儲存格改為 1134,向下拖曳自動填入遞增序號。
  3. 另存 CSV,匯入目標表。

方法二:建表指定 AUTO_INCREMENT 起始值

CREATE TABLE TABLE_1 (
    ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(5) NOT NULL
) AUTO_INCREMENT = 100;  -- 從 100 開始自增

也可事後修改:

ALTER TABLE table_name AUTO_INCREMENT = 1134;

注意:AUTO_INCREMENT = N 僅能設定為 大於現有最大 ID 的值,小於無效。

方法三:SQL 批量更新現有資料 ID(高風險,謹慎)

若必須在資料庫內直接修改既有 ID(如合併分庫分表):

-- 1. 關閉外鍵檢查
SET FOREIGN_KEY_CHECKS = 0;

-- 2. 從大到小更新,避免主鍵衝突
UPDATE sm_position SET id = id + 10000 ORDER BY id DESC;

-- 3. 重設自增起點
ALTER TABLE sm_position AUTO_INCREMENT = 20000;

-- 4. 恢復外鍵檢查
SET FOREIGN_KEY_CHECKS = 1;

警告:修改主鍵值會破壞外鍵關聯、觸發器、應用程式邏輯,極度不建議在線上直接操作,除非完全掌握影響範圍且有完整備份。

最佳實踐建議

  • 新系統設計階段即規劃 ID 空間(如分庫分表用雪花演算法/區段預留)。
  • 資料遷移優先用「匯出→偏移→匯入」非侵入式方式。
  • 若必須線上修改,採用雙寫/同步驗證/平滑切換方案,避免直接改主鍵。
copyright © 萬盛學電腦網 all rights reserved