表有自增主鍵 ID,插入 17 條後刪除 15、16、17,重啟 MySQL,再插入一條,新 ID 是 18 還是 15?
| 引擎 | 新 ID | 原因 |
|---|---|---|
| MyISAM | 18 | 最大 ID 寫在 .MYI 索引檔案,重啟不丟失 |
| InnoDB | 15 | 最大 ID 只在內存,重啟後掃描表取 MAX(id)+1 |
-- 建表
CREATE TABLE test1 (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(10), PRIMARY KEY (id)) ENGINE=InnoDB;
-- 插入 11 筆
INSERT INTO test1 (name) VALUES ('chen'),('chen'),...;
-- 刪除 9,10,11
DELETE FROM test1 WHERE id IN (9,10,11);
-- 查看 AUTO_INCREMENT
SHOW CREATE TABLE test1; -- AUTO_INCREMENT=12
-- 重啟 MySQL
service mysqld restart
-- 再次查看
SHOW CREATE TABLE test1; -- AUTO_INCREMENT=9 (InnoDB 回退)
SELECT LAST_INSERT_ID(); -- 返回當前會話最後自增值
新連接返回 0。
ALTER TABLE tbl AUTO_INCREMENT = 新起始值; 手動調大MyISAM 持久化自增值,InnoDB 內存存儲(5.7 及以前)。重啟後 InnoDB 取 MAX(id)+1,導致自增值回退。生產環境重啟後檢查 AUTO_INCREMENT,必要時手動調大;長期規劃升級 MySQL 8.0 徹底解決。