2016年11月24日 星期四

MySQL InnoDB AUTO_INCREMENT 自動縮小?

MySQL InnoDB 的 auto-increment 計數器數值只儲存在記憶體中,所以重新啟動 MySQL 後,原本的 auto-increment 值就消失了。在需要取得 auto-increment 時,才重新取目前最大值來初始化 auto-increment
SELECT MAX(ai_col) FROM table_name FOR UPDATE;

因為這個特性,
所以若原本 InnoDB 資料表有1~5筆資料
id:1、2、3、4、5 => auto-increment:6

刪除了第2筆、第4筆、第5筆,資料剩第1筆、第3筆
id:1、3 => auto-increment:6

重新啟動 MySQL 後,auto-increment 會變成 4
id:1、3 => auto-increment:4
(註:若為MyISAM,重啟後仍為 6)


其他:
取得 AUTO_INCREMENT 值
//方法1
SHOW TABLE STATUS LIKE "資料表";
//方法2
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = "資料表" AND table_schema = "資料庫";
//方法3 DATABASE()目前資料庫
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = "資料表" AND table_schema = DATABASE();



參考:
MySQL :: MySQL 5.6 Reference Manual :: 14.8.6 AUTO_INCREMENT Handling in InnoDB
sql - How to get the next auto-increment id in mysql - Stack Overflow


沒有留言:

張貼留言