萬盛學電腦網

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

MySQL AUTO_INCREMENT 自增 ID 起始值修改與設置完整指南

建表時指定起始值


CREATE TABLE table_1 (
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(5) NOT NULL
) AUTO_INCREMENT = 100;  -- 從 100 開始

建表後修改起始值


ALTER TABLE users AUTO_INCREMENT = 10000;  -- 類似 QQ 號從 10000 起

大批量刪除後重置自增值


-- 假設最大現有 ID = 123455,希望下一條從 123456 開始
ALTER TABLE users AUTO_INCREMENT = 123456;

單機 MySQL 有效;MySQL Cluster (NDB) 環境下無效,因自增機制不同,需特殊處理。

Rails Migration 寫法


create_table :articles, options: 'AUTO_INCREMENT = 1001' do |t|
  # columns...
end

重置為默認起始值(1)


TRUNCATE TABLE table1;  -- 刪除所有數據並重置 AUTO_INCREMENT=1

DELETE FROM table1 不重置自增值,TRUNCATE 會重置。生產環境謹慎使用 TRUNCATE(隱式提交、不可回滾、觸發器不觸發)。

自增計數器持久化(MySQL 8.0+)


-- 8.0 將自增值持久化到 redo log,重啟不丟失
SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
-- 建議保持默認 2 (interleaved),高併發下性能最佳

常見問題 FAQ

問題原因/解決
ALTER TABLE AUTO_INCREMENT=N 不生效N ≤ 當前最大 ID+1 時無效;需 N > 現有最大 ID
自增 ID 跳號事務回滾、REPLACE INTO、INSERT IGNORE 失敗、批量插入預分配
自增 ID 耗盡 (BIGINT 上限 2^63-1)極罕見,可重構為 UUID/雪花算法 ID
主主同步自增衝突設定 auto_increment_increment=2, offset=1/2 錯開
copyright © 萬盛學電腦網 all rights reserved