2020-12-02:mysql中,一張表里面有 ID 自增主鍵,當 insert 了 17 條記錄之后,洗掉了第 15,16,17 條記錄,再把 Mysql 重啟,再 insert 一條記錄,這條記錄的 ID 是 18 還是 15 ?#福大大架構師每日一題#
uj5u.com熱心網友回復:
18~是通過內置的序列控制的,在序列未滿的情況下都是順次往下~uj5u.com熱心網友回復:
ID 自增主鍵,18uj5u.com熱心網友回復:
如果使用的是InnoDB引擎,且在8版本以前則記錄的ID是15,因為InnoDB會把最大ID寫入到記憶體中,如果是8.0及以后的版本則是將其寫入到日志中的,所以記錄是18。如果使用的是MylSAM引擎,則記錄是18,因為MylSAM會將最大ID記錄到資料檔案中。
uj5u.com熱心網友回復:
15 湊個字數uj5u.com熱心網友回復:
老版本是18 , 除非使用sql修改,新版本情況不清楚uj5u.com熱心網友回復:
是18啊,這是增長ID的作用啊,不管你刪不刪uj5u.com熱心網友回復:
使用MylSAM引擎,則記錄是18uj5u.com熱心網友回復:
這個情況比較復雜的,首先維護自增主鍵id的值AUTO_INCREMENT是放在記憶體里的,這是一個大前提。所以,你采用洗掉表資料是沒用的,AUTO_INCREMENT值沒改變。但是如果你重啟資料庫AUTO_INCREMENT的值就會改變了,相當于重啟后獲得表最大的AUTO_INCREMENT(select max(id) maxId from table,之后AUTO_INCREMENT+1。(引擎是InnoDB)當然也有例外,如果你的mysql低于8.0版本,資料庫引擎是MyISAM,那無論你洗掉或者重啟,AUTO_INCREMENT都不會改變,這應該算是個bug,8.0版本就放棄使用MyISAM引擎了。
uj5u.com熱心網友回復:
這個還是18uj5u.com熱心網友回復:
在新版Navicat里親測,重新插入的id是18,而不是之前的15轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/228527.html
標籤:Java相關
