如何理解資料庫事務隔離級別

2021-06-21 13:13:58 字數 1361 閱讀 9020

總的說,資料庫事物無非就兩種:讀取事物(select)、修改事物(update,insert)。在沒有事物隔離控制的時候,多個事物在同一時刻對同一(資料的操作可能就會影響到最終期望的結果,通常有四種情況

(1) 兩個更新事物同時修改一條資料時,很顯然這種情況是最嚴重的了,程式中無論如何也不能出現這種情況,因為它會造成更新的丟失!通俗的講,我更新時,你丫也更新這不就出問題了嗎,艹,不行!

(2) 乙個更新事物更新一條資料時,另乙個資料讀取了還沒提交的更新,這種情況下會出現讀取到髒資料。通俗的講就是,丫的,讓你在我更新的時候讀取,老子還沒提交你丫就讀,活該吧,老子提交前又修改了資料,你丫讀到髒資料了,活該!

(3) 乙個讀取事物讀取一條資料時另乙個更新事物修改了這條資料,這時就會出現不可重現的讀取。通俗的講,麻痺的,老子讀資料呢,誰讓你丫的修改了,艹,害老子讀了不一樣的資料。

(4)乙個讀取事物讀取時,另乙個插入事物(注意此處時插入,三中時更新同一條數椐,自己體會)插入了一條新資料,這樣就可能多讀出一條資料,出現幻讀。通俗的講,哥們我讀取資料的時侯你插入新資料了是的?怪不得多讀了一條呢還以為中獎了呢!****!

以上四種情況描述完畢,相信大家也發現規律了,前三種是對同一條資料的併發操作,對程式的結果可能產生致命影響,尤其是金融等實時性,準確性要求極高的系統,絕不容許這三中情況的出現,相比第四種情況不會影響資料的真實性,在很多情況下是允許的,如社交論壇等實時性要求不高的系統!

綜上四個情況,我們可以大致這樣簡單的理解(最初說的兩種事物的自由組合2*2=4):

a) 修改時允許修改(丟失更新)

b) 修改時允許讀取(髒讀)

c) 讀取時允許修改(不可重複讀)

d) 讀取時允許插入(幻讀)

從上到下問題越來越不嚴重,但所需的效能開銷卻越大。因為不同的系統允許不同級別的情況,所以就出現了事務隔離這麼乙個東東,來允許我們設定資料庫的並發行為。

其中1)讀取未提交, 這個級別就是乙個事物更新的時候不允許更新,但允許讀取,說以不會出現丟失更新,單會出現髒讀。隔離級別最低。

2)讀取已提交資料,就是乙個事物更新的時候不允許讀取,必須等到更新事物提交後才能讀取,不會出現髒讀,但可能出現不可重複度。隔離級別次低。

以上兩種級別是針對更新事物的限制,在讀取事物進行時,是不會有任何限制的。所以會出現不可重複讀(讀取時,有更新),和幻讀(讀取時,插入)。

3)可重現的讀取,就是乙個事物讀取時,不允許更新,但允許插入。不會出現不可重複讀,但會出現幻讀。

4)序列化(大招),你麻,只要有事物進行,其他事物必須他媽乖乖等著老子執行完。霸氣側漏,所以不會出現任何併發問題。

以上兩個事物會限制讀取事物的,所以隔離級別較高,但效能開銷不容小覷。

題外話,話說,這幾個術語取得真他媽蛋疼,耽誤老子理解啊,misleading嘛。

好累,歇一會。

理解資料庫之事務與其隔離級別

一 事務的四大特性 原子性原子性是指事務包含的操作要麼全部成功,要麼全部失敗回滾。一致性一致性是指事務必須使資料庫從乙個一致性狀態變換為另乙個一致性狀態,也就是說事務執行之前和執行之後都必須處於一致性狀態。以a b兩個使用者轉賬為例,無論如何轉賬,兩個使用者的總金額和是不變的。隔離性隔離性是指當多個...

面試必備 快速理解資料庫事務隔離級別

顯示異常可前往檢視 相信用過mysql的朋友都知道事務,我們也常常通過這個例子來講解事務的作用 a向b轉賬,這裡可以分為兩步運算元據庫,a賬戶餘額減少,b賬戶餘額增加。但是,如果在a賬戶餘額減少的時候突然出現了資料庫宕機了等情況,是不是會出現a的餘額變少了,但是b的餘額卻沒有增加的情況呢?答案是否定...

資料庫事務原理詳解 資料庫隔離級別

隔離級別 隔離級別的值 導致的問題 read uncommitted 0導致髒讀 read committed 1避免髒讀,允許不可重複讀和幻讀 repeatable read 2避免髒讀,不可重複讀,允許幻讀 serializable 3序列化讀,事務只能乙個乙個執行,避免了髒讀 不可重複讀 幻讀...