MySQL 維護兩類系統變量:
SHOW VARIABLES LIKE '%auto_increment%';
輸出關鍵變量:
auto_increment_increment:遞增步長(默認 1)auto_increment_offset:起始偏移量(默認 1)| offset | increment | 生成序列 |
|---|---|---|
| 1 | 1 | 1, 2, 3, 4... |
| 2 | 10 | 2, 12, 22, 32... |
注意:若 offset > increment,offset 會被忽略。
SET @@auto_increment_increment = 10;
SET @@auto_increment_offset = 2;
僅影響當前會話,持久化需寫入 my.cnf。
場景:表有自增主鍵 id,插入 10 行後刪除 id=8,9,10,重啟 MySQL,再插入一行,新 ID 為 8 還是 11?
| 存儲引擎 | 新 ID | 原因 |
|---|---|---|
| MyISAM | 11 | 最大 ID 寫入數據文件,重啟不丟失 |
| InnoDB | 8 | 最大 ID 僅在內存,重啟/OPTIMIZE 後丟失,重新掃描表取最大值 |
auto_increment_increment 和 offset 避免主鍵衝突