理解MySQL(二) 資料庫事務

2022-07-15 03:03:11 字數 1355 閱讀 1729

1、事務:事務內的語句,要麼全部執行成功,要麼全部執行失敗。

a)      資料庫事務四要素:acid,原子性,一致性,隔離性,永續性。

b)      原子性:乙個事務必須被視為不可分割的最小單元。

c)      一致性:資料庫是從乙個一致性狀態轉換到另外乙個一致性狀態。

d)      隔離性:乙個事務所做的修改在最終提交前,對其他事務是不可見的。

e)    永續性:一旦事務提交,其所做的修改就會被永久儲存到資料庫

2、 隔離級別:規定了乙個事務所做的修改,,哪些在事務內和事務間是可見的,哪些是不可見的。較低階別的隔離可以執行更高的併發,系統的開銷也更小。

a)      read uncommited(未提交讀):在該級別中,事務的修改,即使沒有提交,對其他事務也是可見的事務可以讀取未提交的資料,稱為髒讀。實際很少使用未提交讀。

b)      read commited(提交讀):乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。因為這個級別執行兩次查詢,可能會得到不同的結果,所以也被稱為不可重複讀

c)      pereatable read(可重複讀):保證了在同一事務中多次讀取同樣記錄的結果是一樣的。但是該級別還無法解決幻讀的問題。幻讀,指的是當某個事務在讀取某個範圍的記錄時,另外乙個事務又在該範圍插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行,也就是讀取的記錄數不同。可重複讀是mysql的預設事務隔離級別

d)      serializable(可序列化):最高的隔離級別,通過強制事務序列執行,避免了前面說的幻讀的問題。簡單來說,serializable會在讀取的每一行資料上加鎖,所以可能導致大量超時和鎖爭用問題。

隔離級別

髒讀可能性

不可重複讀可能性

幻讀可能性

加鎖讀read uncommited

yesyes

yesno

read commited

noyes

yesno

pereatable read

nono

yesno

serializable

nono

noyes

3、死鎖:指的是兩個或者多個事務在同一資源上相互占用,並請求鎖定對方占用的資源,從而導致惡性迴圈的現象。innodb處理死鎖的方式是將持有最少行級排他鎖的事務進行回滾。

4、mysql中的事務,可以通過實行set transaction islation level命令來設定隔離級別。

更新於2019.7.18

mysql資料庫事務

維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...

MySQL資料庫事務

文章出處 只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件 1 髒讀 2 不可重複讀 3 幻讀 1 讀未提交 read uncommitted 可能產生髒讀 不可重複讀 幻讀 2 讀已提交 read committed 避免了髒讀,可能產生不可重複讀 幻讀 3 可重複讀 rep...

mysql資料庫事務

原子性 乙個事務 transaction 中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節 一致性 在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞 隔離性 資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致...