在資料庫操作中,為了有效保證併發讀取資料的正確性,提出事物隔離併發級別。
原子性(atomicity)一致性(
consistency
)隔離性(
isolation
)永續性(
durability)
資料庫事物的隔離級別有四個:由低到高依次為 read uncommitted、
read committed
、repeatable read
、serializable .
這四個隔離級別依次解決髒讀、不可重複讀、幻讀這幾類問題。
read uncommitted(讀未提交)
出現了髒讀
不可重複讀
幻讀舉例:兩個併發事務,事務a:領導給
single
發工資(
5000
)事務b
:single
查詢工資賬戶(
5000
開心 實際是
2000
),事務
b在事務
a提交之前讀取。事務
a發現出錯,所以回滾。
read committed(讀提交
) 避免了髒讀 出現了不可重複讀 幻讀
舉例:兩個併發事務,事務a:
single
消費 事務b:
single
的老婆在網上轉賬 事務
a讀取了資料,事務
b緊接著更新了資料並提交事務,事務
a再次讀取資料,資料發生了改變。即不可重複讀。
repeatable read 重複讀 避免了髒讀 、不可重複讀 出現幻讀
如何避免不可重複讀:當single消費時,一旦系統開始讀取工資卡資訊(事務開啟時),
single
老婆不可能對該記錄進行修改,也就是不能轉賬。雖然避免了不可重複讀,但是出現了幻讀。
舉例:事務1:
single
老婆在銀行上班,可檢視
single
信用卡消費資訊。一天,查詢到
single
當月的消費總額是
80元(
select sum(amount) from transaction where month =
本月) 事務2:
single
此時正在外胡吃海喝,消費了
1000
元,即新增了一條
1000
元的消費記錄(
insert transaction
),並提交了事務。 隨後
single
老婆列印了賬單,卻發現總額是
1080
,即出現了幻讀。
舉例:事務1:刪除了一條主鍵為
1的記錄,事務
2:插入了一條主鍵為
1的記錄,並提交。事務
1 查詢資料,卻發現主鍵為
1的記錄仍然在,即出現幻讀。
資料庫隔離級別
read uncommited 讀未提交 最低級別,可讀取未提交事物的資料,這會導致髒讀,比如 某時刻會話a修改了乙個資料,但還未提交,此時會話b,讀取了該資料,這是,會話a回滾了事物,這就導致資料出現了不一致狀態,這就是髒讀 read commited 提交讀 避免了髒讀,但會導致不可重複讀,例如...
資料庫隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀 不可重複讀 幻讀read uncommitted re...
資料庫隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...