因為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是被使用還是被回滾,這就導致阻塞。比如下面的例子...