MySQL Innodb事務ACID原理

2021-09-24 06:08:30 字數 1403 閱讀 7442

資料庫事務的四大特性有原子性(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)中,是滿足隔離性的。

傳統rdbms加鎖的乙個原則,就是2pl (二階段鎖):two-phase locking。相對而言,2pl比較容易理解,說的是鎖操作分為兩個階段:加鎖階段與解鎖階段,並且保證加鎖階段與解鎖階段不相交。

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

MySQL InnoDB事務模型

事務的acid特性 原子性 一致性 隔離性 永續性。這部分不多說了,任何一本講資料庫理論的書籍裡邊都會有講。mysql innodb通過鎖來實現事務的一致性和隔離性,共實現了四種事務隔離級別 read uncommitted讀取未提交 某個session中的事務可以看到其他session的事務中尚未...

Mysql InnoDB 事務簡單理解

1.事務基本特性 acid a 由undo 來實現的 i 由鎖實現 d 由redo實現 c 由aid共同保證 2.undo 實現了 事務的回滾 以及 mvcc 事務的回滾 記錄下事務期間的所有update delete insert操作的前後value,當需要rollback時會做乙個相反的操作。m...

Mysql InnoDB事務隔離級別

隔離級別 髒讀 dirty read 不可重複讀 nonrepeatable read 幻讀 phantom read 未提交讀 read uncommitted 可能可能 可能已提交讀 read committed 不可能可能 可能可重複讀 repeatable read 不可能不可能 可能可序列...