關於MySQL中自增列的理解

2021-09-29 07:45:54 字數 488 閱讀 5566

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

題目背景不夠清晰,表的儲存引擎是innodb還是myisam,這麼說的意義在於,自增列的資訊在myisam和innodb中的維護邏輯是不大一樣的,在myisam中是儲存持久化在檔案中的,當資料庫重啟之後,是可以通過持久化的資訊持續對id進行自增的,而innodb的自增列資訊既不在.frm檔案,也不在.ibd檔案中,所以在此啟動的時候會按照max(id)+1的演算法進行修復。所以如果是myisam,則答案應該是18,而如果是innodb,則答案是15;

在mysql 8.0之後,innodb的自增列資訊寫入了共享表空間中,所以服務重啟之後,還是可以繼續追溯這個自增列的id變化情況的;

最終結論

在mysql 8.0之前:

在mysql 8.0及其之後:

Mysql 自增列 主鍵

mysql中假如有 id int auto increment,cid varchar 36 通常情況下都是 id設定為主鍵。假如要設定cid為主鍵。自增列id必需是唯一索引。create table temp id bigint not null auto increment comment 編號...

mysql 自增列的建立

1.建表時就建立自增列 create table test id int auto increment primary key,name varchar 20 not null,password varchar 20 not null insert into test values null,aa ...

重置SQLSERVER表的自增列,讓自增列重新計數

sql的自增列挺好用,只是開發過程中一旦刪除資料,標識列就不連續了 寫起來 也很鬱悶,所以查閱了一下標識列重置的方法 發現可以分為三種 刪除原表資料,並重置自增列 truncate table tablename truncate方式也可以重置自增字段 重置表的自增欄位,保留資料 dbcc chec...