1. 程式人生 > >Mysql-事務與Redo Log、Undo Log

Mysql-事務與Redo Log、Undo Log

一 Undo Log

Undo Log是為了實現事務的原子性,在MySQL資料庫InnoDB儲存引擎中,還用Undo Log來實現多版本併發控制(簡稱:MVCC)。

1   事務的原子性(Atomicity)

事務中的所有操作,要麼全部完成,要麼不做任何操作,不能只做部分操作。如果在執行的過程中發生了錯誤,要回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過。

2   原理

Undo Log的原理很簡單,為了滿足事務的原子性,在操作任何資料之前,首先將資料備份到一個地方(這個儲存資料備份的地方稱為Undo Log)。然後進行資料的修改。如果出現了錯誤或者使用者執行了ROLLBACK語句,系統可以利用Undo Log中的備份將資料恢復到事務開始之前的狀態。

除了可以保證事務的原子性,Undo Log也可以用來輔助完成事務的持久化。

3   事務的永續性(Durability)

事務一旦完成,該事務對資料庫所做的所有修改都會持久的儲存到資料庫中。為了保證永續性,資料庫系統會將修改後的資料完全的記錄到持久的儲存上。

1)    用Undo Log實現原子性和持久化的事務的簡化過程

假設有A、B兩個資料,值分別為1,2。

A.事務開始.

B.記錄A=1到undo log.

C.修改A=3.

D.記錄B=2到undo log.

E.修改B=4.

F.將undo log寫到磁碟。

G.將資料寫到磁碟。

H.事務提交