核心語法
ALTER TABLE table_name AUTO_INCREMENT = new_value;
參數說明
table_name:目標表名
new_value:新的自增起始值(下一條 INSERT 將使用此值)
關鍵限制
- new_value 必須 ≥ 當前最大自增值 + 1
- 若設定值 ≤ 現有最大值,語句執行成功但不生效,下一條仍按現有最大值+1
- 不支援減小自增值(需重建表或 TRUNCATE)
實戰範例
-- 查看當前自增值
SHOW TABLE STATUS LIKE 'users'\G
-- Auto_increment: 101
-- 設定下一條 ID 為 1000
ALTER TABLE users AUTO_INCREMENT = 1000;
-- 驗證
INSERT INTO users (name) VALUES ('test');
SELECT * FROM users WHERE id = 1000; -- 成功
常見應用場景
- 分庫分表 ID 隔離:不同分片設定不同起始區間(如 1000000、2000000)
- 數據遷移後銜接:導入歷史數據後,設定自增值避免主鍵衝突
- 測試環境重置:配合
TRUNCATE TABLE 重置自增計數器
- 業務語義 ID:訂單號從特定數字段開始(如 2023000001)
注意事項
- InnoDB 重啟後會重新計算自增值(
SELECT MAX(id)+1),5.7.23+ 持久化自增值可避免
- 主從複制環境下,主庫修改自增值會同步到從庫
- 配合
auto_increment_offset、auto_increment_increment 實現雙主/多主 ID 不衝突
相關參數
SHOW VARIABLES LIKE 'auto_inc%';
-- auto_increment_increment: 步長(預設 1)
-- auto_increment_offset: 偏移量(預設 1)