為什麼mysql事務回滾後,自增ID依然自增

2022-07-07 19:06:15 字數 335 閱讀 4671

因為innodb的auto_increament的計數器記錄的當前值是儲存在存內 存中的,並不是存在於磁碟上,當mysql

server處於執行的時候,這個計數值只會隨著insert改增長,不會隨著delete而減少。而當mysql

server啟動時,當我們需要去查詢auto_increment計數值時,mysql便會自動執行:select max(id) from 表名

for update;語句來獲得當前auto_increment列的最大值,然後將這個值放到auto_increment計數器中。所以就算

rollback mysql的auto_increament計數器也不會作負運算。

為什麼mysql事務回滾後, 自增ID依然自增

事務回滾後,自增id仍然增加,回滾後,自增id仍然增加。比如當前id是7,插入一條資料後,又回滾了。然後你再插入一條資料,此時插入成功,這時候你的id不是8,而是9。因為雖然你之前插入回滾,但是id還是自增了。如果你認為自增id不應該被事務化,那麼其他事務不得不等待著,檢查自增id是被使用還是被回滾...

事務回滾後,自增ID仍然增加。

回滾後,自增id仍然增加。比如當前id是7,插入一條資料後,又回滾了。然後你再插入一條資料,此時插入成功,這時候你的id不是8,而是9.因為雖然你之前插入回滾,但是id還是自增了。如果你認為自增id不應該被事務化,那麼其他事務不得不等待著,檢查自增id是被使用還是被回滾,這就導致阻塞。比如下面的例子...

事務回滾後,自增ID仍然增加

回滾後,自增id仍然增加。比如當前id是7,插入一條資料後,又回滾了。然後你再插入一條資料,此時插入成功,這時候你的id不是8,而是9.因為雖然你之前插入回滾,但是id還是自增了。如果你認為自增id不應該被事務化,那麼其他事務不得不等待著,檢查自增id是被使用還是被回滾,這就導致阻塞。比如下面的例子...