資料庫事物隔離級別通俗理解

2021-09-10 09:07:40 字數 1558 閱讀 2946

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

好累,歇一會。

資料庫的事物隔離級別通俗理解

總的說,資料庫事物無非就兩種 讀取事物 select 修改事物 update,insert 在沒有事物隔離控制的時候,這兩種事物的排列,a22,就有四種有序的併發事物可能性 更新時又乙個更新,更新時來了乙個讀取的,讀取時來了乙個更新的,讀取時來了乙個插入的,最後一種有點不大一樣 這樣多個事物在同一時...

資料庫事物隔離級別

資料庫事物的隔離級別有4個,由低到高依次為 1.read uncommitted 兩個併發的事務,事務b讀取了事物a尚未提交的資料,出現髒讀。2.read committed 事務a事先讀取了資料,事務b緊接更新了資料,並提交了事務,而事務a再次讀取該資料時,資料已發生了改變,即所說的不可重複讀。3...

資料庫事物隔離級別

事物隔離級別 1 序列化 serializable 單位時間,只有乙個事物,強制事物排序,並行度低,效能差 2 可重複讀 repeatable read 讀操作可以並行,同乙個事物裡,所有讀操作的結果都是事物開始時的狀態 一致性 但可以增加新的記錄,mysql 預設事物隔離級別 3 讀已提交 rea...