《MYSQL教程MYSQL事務(wù)回滾的2個問題分析》要點:
本文介紹了MYSQL教程MYSQL事務(wù)回滾的2個問題分析,希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL必讀因此,正確的原子操作是真正被執(zhí)行過的.是物理執(zhí)行.
MYSQL必讀在當(dāng)前事務(wù)中確實能看到插入的記錄.最后只不過刪除了.但是AUTO_INCREMENT不會應(yīng)刪除而改變值.
MYSQL必讀1、為什么auto_increament沒有回滾?
MYSQL必讀因為innodb的auto_increament的計數(shù)器記錄的當(dāng)前值是保存在存內(nèi)存中的,并不是存在于磁盤上,當(dāng)mysql server處于運(yùn)行的時候,這個計數(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ù)運(yùn)算.
MYSQL必讀2、MySQL的事務(wù)對表操作的時候是否是物理操作?
MYSQL必讀MySQL的事務(wù)是有redo和undo的,redo操作的所有信息都是記錄到 redo_log中,也就是說當(dāng)一個事務(wù)做commit操作時,需要先把這個事務(wù)的操作寫到redo_log中,然后再把這些操作flush到磁盤上,當(dāng) 出現(xiàn)故障時,只需要讀取redo_log,然后再重新flush到磁盤就行了.
MYSQL必讀而對于undo就比較麻煩,MySQL在處理事務(wù)時,會在數(shù)據(jù)共享 表空間里申請一個段叫做segment段,用保存undo信息,當(dāng)在處理rollback,不是完完全全的物理undo,而是邏輯undo,就是說會對之 前的操作進(jìn)行反操作,但是這些共享表空間是不進(jìn)行回收的.這些表空間的回收需要由mysql的master thread進(jìn)程來進(jìn)行回收.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/3251.html