首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL AUTO_INCREMENT 自增屬性深度解析與陷阱

     編輯:MySQL 資料庫相關知識

系統變量基礎

MySQL 維護兩類系統變量:

  • GLOBAL:實例級,影響所有新連接,重啟失效除非寫入配置文件
  • SESSION:會話級,僅影響當前連接

查看自增相關變量

SHOW VARIABLES LIKE '%auto_increment%';

輸出關鍵變量:

  • auto_increment_increment:遞增步長(默認 1)
  • auto_increment_offset:起始偏移量(默認 1)

變量組合效果示例

offsetincrement生成序列
111, 2, 3, 4...
2102, 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原因
MyISAM11最大 ID 寫入數據文件,重啟不丟失
InnoDB8最大 ID 僅在內存,重啟/OPTIMIZE 後丟失,重新掃描表取最大值

生產環境建議

  • 業務依賴連續無縫隙 ID → 應用層維護序列號,勿依賴自增
  • 主從架構 → 設置 auto_increment_increment 和 offset 避免主鍵衝突
  • InnoDB 表頻繁重啟 → 預期自增值會「倒退」,設計時考慮容忍度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved