目錄
一、事務的基本要素(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第二次查詢資料時,多了一條資料,就好像發生了幻覺一樣。
解決途徑:鎖住整張表,用表鎖
區別點:1. 讀未提交:髒讀、不可重複讀、幻讀都可以發生不可重複讀側重於修改,幻讀側重於增加和刪除資料,解決途徑分別是使用mysql的行鎖和表鎖
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...