MySQL-Innodb事務ACID原理

數據庫事務的四大特性有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

原子性

根據定義,原子性是指一個事務是一個不可分割的工作單位,其中的操作要麼都做,要麼都不做。即要麼轉賬成功,要麼轉賬失敗,是不存在中間的狀態!

隔離性

根據定義,隔離性是指多個事務併發執行的時候,事務內部的操作與其他事務是隔離的,併發執行的各個事務之間不能互相干擾。

持久性

根據定義,持久性是指事務一旦提交,它對數據庫的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

一致性

根據定義,一致性是指事務執行前後,數據處於一種合法的狀態,這種狀態是語義上的而不是語法上的。

原子性要求事務中的一系列操作要麼都要執行,要麼都不執行,不會部分執行,是通過用undolog回滾日誌來實現的(生成undolog時也會對undolog生成redolog確保完整生成undolog不丟失),事務執行失敗或調用rollback時執行回滾操作將數據回滾成修改之前的操作。隔離性要求多個事務各個事務中的一系列操作對結果互相不覆蓋不影響,是通過用鎖和MVCC機制實現的。持久性要求事務的執行結果是已經被持久化了的,已經存在硬盤上了的。原子性,隔離性,持久性實現之後即實現了一致性。一致性有在數據庫與應用兩個層面的要求

undolog是邏輯日誌,記錄了回滾時需要執行的數據庫操作的日誌。

redolog是物理日誌,是關係數據庫數學模型結構在內存中的物理分頁,比操作系統內存分頁要小,是數據庫數據在內存中的緩存,緩存數據被修改後會被標記爲髒數據,之後會順序寫入磁盤,順序寫入執行效率要高,而非性能差的隨機寫入方式,之後會由數據庫將已持久化到硬盤中redolog中的修改寫到數據所改在的位置。

MVCC,即多版本併發控制(Multi Version Concurrency Control),一個行記錄數據有多個版本對快照數據,這些快照數據在undo log中。如果一個事務讀取的行正在做DELELE或者UPDATE操作,讀取操作不會等行上的鎖釋放,而是讀取該行的快照版本。
由於MVCC機制在可重複讀(Repeateable Read)和讀已提交(Read Commited)的MVCC表現形式不同,就不贅述了。
但是有一點說明一下,在事務隔離級別爲讀已提交(Read Commited)時,一個事務能夠讀到另一個事務已經提交的數據,是不滿足隔離性的。但是當事務隔離級別爲可重複讀(Repeateable Read)中,是滿足隔離性的。

 

2PL:Two-Phase Locking

傳統RDBMS加鎖的一個原則,就是2PL (二階段鎖):Two-Phase Locking。相對而言,2PL比較容易理解,說的是鎖操作分爲兩個階段:加鎖階段與解鎖階段,並且保證加鎖階段與解鎖階段不相交。

即在一個事務之中可能有多次增刪改操作,而在每次增刪改操作時都是在追加一條鎖定,之後在事務執行過程中一直保持對對象的鎖定狀態,而只有到事務提交時纔會將全部鎖定一起解鎖。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章