Undo Log是爲了實現事務的原子性,在MySQL數據庫InnoDB存儲引擎中,還用Undo Log來實現多版本併發控制(簡稱:MVCC)。數據庫
事務中的全部操做,要麼所有完成,要麼不作任何操做,不能只作部分操做。若是在執行的過程當中發生了錯誤,要回滾(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過。併發
Undo Log的原理很簡單,爲了知足事務的原子性,在操做任何數據以前,首先將數據備份到一個地方(這個存儲數據備份的地方稱爲Undo Log)。而後進行數據的修改。若是出現了錯誤或者用戶執行了ROLLBACK語句,系統能夠利用Undo Log中的備份將數據恢復到事務開始以前的狀態。spa
除了能夠保證事務的原子性,Undo Log也能夠用來輔助完成事務的持久化。事務
事務一旦完成,該事務對數據庫所作的全部修改都會持久的保存到數據庫中。爲了保證持久性,數據庫系統會將修改後的數據徹底的記錄到持久的存儲上。ci
假設有A、B兩個數據,值分別爲1,2。it
A.事務開始.原理
B.記錄A=1到undo log.數據
C.修改A=3.備份
D.記錄B=2到undo log.co
E.修改B=4.
F.將undo log寫到磁盤。
G.將數據寫到磁盤。
H.事務提交