Mysql的ACID 事務併發 事務隔離級別

2021-09-17 22:21:49 字數 1107 閱讀 6167

目錄

一、事務的基本要素(acid)

a:atomicity,即原子性;

c:consistency,即一致性;

i:isolation,即隔離性;

d:durability,即永續性;

二、事務的併發問題

1. 髒讀:

2. 不可重複讀:

3. 幻讀:

三、mysql的事務隔離級別

事務開始後的所有操作,要麼全部完成,要麼全部不完成,不會停留在中間環節;事務執行過程**錯,會回滾到事務開始前的狀態,也就是說事務是乙個不可分割的整體。

ps:flume的put和take事務也是通過錯誤回滾機制實現事務性的

事務開始前和結束後,資料庫的完整性約束並沒有被破壞,例如a給b轉賬,a扣了錢,b不可能沒收到。

同一時間,只允許乙個事務請求同一資料,不同事務之間不會存在干擾;例如a用一張銀行卡取錢,在取完錢之前,b不能往這張卡里轉賬。

事務完成後,事務對於資料庫所做的更新將會持久化儲存在資料庫中,不能回滾。

事務a讀取了事務b的資料,然後b進行資料回滾,a讀到的是髒資料。

事務a多次重複讀取同一資料,事務b在事務a多次讀取的過程中,對資料做了更新和提交,導致a每次讀取到的同一資料的結果不一致。

解決途徑:鎖住每次重複讀取的行,用行鎖

事務a第一次查詢資料,得到乙個結果;然後事務b插入一條資料,事務a第二次查詢資料時,多了一條資料,就好像發生了幻覺一樣。

解決途徑:鎖住整張表,用表鎖

區別點:

不可重複讀側重於修改,幻讀側重於增加和刪除資料,解決途徑分別是使用mysql的行鎖和表鎖

1. 讀未提交:髒讀、不可重複讀、幻讀都可以發生

2. 不可重複讀:不會發生髒讀,但可能發生不可重複讀和幻讀

3. 可重複讀:不會發生髒讀和不可重複讀,但是會發生幻讀

4. 序列化:髒讀、不可重複讀、幻讀都不會發生,事務隔離級別最高

ps:mysql預設的事務隔離級別是可重複讀

MySQL 事務的ACID 併發問題 隔離級別

小結 不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表 事務隔離級別 髒讀不可重複讀 幻讀鎖策略 讀未提交 read uncommitted 是是 是不會鎖住指定的行 不可重複讀 read committed 否是 ...

MySQL 事務概念 ACID

事務是用來保證業務操作的完整性 整個業務要麼全部成功,要麼全部失敗,不允許部分成功,部分失敗 a 原子性 c 一致性 i 隔離性 d 永續性 讀未提交 read uncommitted 讀已提交 read commited 可重複讀 repeatable read 序列化讀 serlalizable...

MySQL 事務的ACID特性

事務的acid特性 原子性 atomicity 乙個事務是乙個不可分割的最小工作單位,事務中的所有操作要麼都做,要麼都不做。一致性 consistency 事務前後資料的完整性必須保持一致.事務必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態,一致性與原子性是密切相關的。隔離性 isolation...