mysql中的auto increment的問題

2021-09-01 07:24:51 字數 1138 閱讀 1854

今兒在逛論壇時,發現乙個看似很簡單的問題,卻引起了大家的廣泛關注:

這是一道很早的面試題:

一張表,裡面有id自增主鍵,當insert了17條記錄之後,刪除了第15,16,17條記錄,再把mysql重啟,再insert一條記錄,這條記錄的id是18還是15 。

答案:如果表的型別是myisam,那麼是18。

因為myisam表會把自增主鍵的最大id記錄到資料檔案裡,重啟mysql自增主鍵的最大id也不會丟失。

如果表的型別是innodb,那麼是15。

innodb表只是把自增主鍵的最大id記錄到記憶體中,所以重啟資料庫或者是對錶進行optimize操作,都會導致最大id丟失。

自己也做了個實驗,結果證實了上面的說法。真是慚愧啊,看似簡單的問題自己也打錯了。

mysql> select * from test1; +----+-----------+ | id | name | +----+-----------+ | 1 | 陳兵輝 | | 2 | chen | | 3 | chen | | 4 | chen | | 5 | chen | | 6 | chen | | 7 | chen | | 8 | chen | | 9 | chen | | 10 | chen | | 11 | chen | +----+-----------+ 11 rows in set (0.00 sec) mysql> delete from test1 where id in (10,11,9); query ok, 3 rows affected (0.03 sec) mysql> show create table test1; create table `test1` ( `id` int(11) not null auto_increment, `name` varchar(10) default null, primary key (`id`) ) engine=innodb auto_increment=

9 default charset=utf8 | 2,另外還有乙個就是獲取當前資料庫表的自增字段數。

mysql> select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 0 | +------------------+ 1 row in set (0.00 sec)

mysql中的編碼 mysql中的編碼

一 mysql中的編碼 mysql show variables like collation mysql show variables like character set 預設是latin1編碼,會導致中文亂碼。修改庫的編碼 mysql alter database db name charac...

mysql中 變數 mysql中的變數

toc 變數 mysql本質是一種程式語言,需要很多變數來儲存資料。mysql中很多的屬性控制都是通過mysql中固有的變數來實現的。系統變數 系統內部定義的變數,系統變數針對所有使用者 mysql客戶端 有效。檢視系統所有變數 show variables like pattern mysql允許...

mysql中的函式名 MySQL中的函式

一 數學函式 數學函式主要用於處理數字,包括整型 浮點數等。abs x 返回x的絕對值 select abs 1 返回1 ceil x ceiling x 返回大於或等於x的最小整數 select ceil 1.5 返回2 floor x 返回小於或等於x的最大整數 select floor 1.5...