1. 程式人生 > >mysql 自增主鍵為什麽不是連續的?

mysql 自增主鍵為什麽不是連續的?

連續 內存 持久化 nbsp 頁分裂 語句 sam 保持 事務回滾

由於自增主鍵可以讓主鍵索引盡量地保持遞增順序插入,避免了頁分裂,因此索引更緊湊

MyISAM 引擎的自增值保存在數據文件中

nnoDB 引擎的自增值,其實是保存在了內存裏,並且到了 MySQL 8.0 版本後,才有了“自增值持久化”的能力,也就是才實現了“如果發生重啟

表的自增值可以恢復為 MySQL 重啟前的值,在 MySQL 5.7 及之前的版本,自增值保存在內存裏

每次重啟後,第一次打開表的時候,都會去找自增值的最大值 max(id)

然後將 max(id)+1 作為這個表當前的自增值

到賬自增主鍵不連續

1 唯一鍵沖突是導致自增主鍵 id

2 事務回滾也會導致

3 語句執行過程中,第一次申請自增 id,會分配 1 個;

1個用完以後,還是這個語句,第三次申請自增 id,會分配 2 個;

2 個用完以後,還是這個語句,第三次申請自增 id,會分配 4個

如果只用到了iD3 id4就被浪費了 之後再有插入語句 自增id就是從id5開始

mysql 自增主鍵為什麽不是連續的?