MYSQL事務(wù)回滾的2個問題分析
因此,正確的原子操作是真正被執(zhí)行過的。是物理執(zhí)行。
在當(dāng)前事務(wù)中確實能看到插入的記錄。最后只不過刪除了。但是AUTO_INCREMENT不會應(yīng)刪除而改變值。
1、為什么auto_increament沒有回滾?
因為innodb的auto_increament的計數(shù)器記錄的當(dāng)前值是保存在存內(nèi)存中的,并不是存在于磁盤上,當(dāng)mysql server處于運行的時候,這個計數(shù)值只會隨著insert改增長,不會隨著delete而減少。而當(dāng)mysql server啟動時,當(dāng)我們需要去查詢auto_increment計數(shù)值時,mysql便會自動執(zhí)行:SELECT MAX(id) FROM 表名 FOR UPDATE;語句來獲得當(dāng)前auto_increment列的最大值,然后將這個值放到auto_increment計數(shù)器中。所以就算 Rollback MySQL的auto_increament計數(shù)器也不會作負(fù)運算。
2、MySQL的事務(wù)對表操作的時候是否是物理操作?
MySQL的事務(wù)是有redo和undo的,redo操作的所有信息都是記錄到 redo_log中,也就是說當(dāng)一個事務(wù)做commit操作時,需要先把這個事務(wù)的操作寫到redo_log中,然后再把這些操作flush到磁盤上,當(dāng) 出現(xiàn)故障時,只需要讀取redo_log,然后再重新flush到磁盤就行了。
而對于undo就比較麻煩,MySQL在處理事務(wù)時,會在數(shù)據(jù)共享 表空間里申請一個段叫做segment段,用保存undo信息,當(dāng)在處理rollback,不是完完全全的物理undo,而是邏輯undo,就是說會對之 前的操作進(jìn)行反操作,但是這些共享表空間是不進(jìn)行回收的。這些表空間的回收需要由mysql的master thread進(jìn)程來進(jìn)行回收。
- MySQL數(shù)據(jù)庫主從同步實戰(zhàn)過程詳解
- MySQL主從同步中的server-id示例詳解
- MySQL主從同步延遲的原因及解決辦法
- MySQL主從同步機(jī)制與同步延時問題追查過程
- Mysql主從同步的實現(xiàn)原理
- PHP入門教程之使用Mysqli操作數(shù)據(jù)庫的方法(連接,查詢,事務(wù)回滾等)
- 詳解MySQL數(shù)據(jù)庫設(shè)置主從同步的方法
- Shell腳本實現(xiàn)監(jiān)控MySQL主從同步
- MySQL5.1主從同步出現(xiàn)Relay log read failure錯誤解決方法
- MySQL 主從同步,事務(wù)回滾的實現(xiàn)原理
相關(guān)文章
mysql 5.7.21 winx64綠色版安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.21 winx64綠色版安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09MySQL進(jìn)行大數(shù)據(jù)量分頁的優(yōu)化技巧分享
mysql大數(shù)據(jù)量分頁情況下性能會很差,所以本文就來講一講mysql大數(shù)據(jù)量下偏移量很大,性能很差的問題,并附上解決方式,希望對大家有所幫助2024-01-01關(guān)于mysql delete的問題小結(jié)
關(guān)于mysql delete的問題,需要的朋友可以參考下。2011-05-05