資料庫事務的隔離級別和傳播行為

2021-09-26 00:00:43 字數 993 閱讀 7145

事務的性質:

acid

a:原子性

c:一致性

i:隔離性

d:永續性

隔離級別:

read uncommitted(未提交讀):可讀取其他事務未提交的資料,髒讀、幻讀、不可重複讀

read committed(已提交讀),只能讀取其他事務已提交的資料,解決髒讀

repeatable read(可重複讀),在乙個事務中,對於同乙份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交,解決髒讀,不可重複讀

serializable(序列化)

注意:不可重複讀和幻讀的區別在於,幻讀的重點在於insert,而不可重複讀的重點在於update和delete

避免不可重複讀需要鎖行就行

避免幻影讀則需要鎖表

如果使用鎖機制來實現這兩種隔離級別,在可重複讀中,該sql第一次讀取到資料後,就將這些資料加鎖,其它事務無法修改這些資料,就可以實現可重複 讀了。但這種方法卻無法鎖住insert的資料,所以當事務a先前讀取了資料,或者修改了全部資料,事務b還是可以insert資料提交,這時事務a就會 發現莫名其妙多了一條之前沒有的資料,這就是幻讀,不能通過行鎖來避免。需要serializable隔離級別 ,讀用讀鎖,寫用寫鎖,讀鎖和寫鎖互斥,這麼做可以有效的避免幻讀、不可重複讀、髒讀等問題,但會極大的降低資料庫的併發能力。

傳播行為

required: 支援事物,當前沒有事物新建,存在事物則加入

support:支援事物,當前沒有事物已非事務執行,當前存在事物加入

madnatory:支援事物,當前存在事物加入,不存在丟擲異常

requires_new:支援事物,不管當前有沒有事物都新建事物

not_support:不支援事物,當前存在事物掛起,以非事物執行

never:不支援事物,當前存在事物丟擲異常,以非事物執行

nested:不支援事物,當前存在事物巢狀在事物內執行,不存在事物與required一致

詳見:

資料庫的隔離級別和傳播行為

transactional註解原始碼 target retention retentionpolicy.runtime inherited documented public inte ce transactional 方法在發生指定名稱的異常時回滾 string rollbackforclassn...

事務的隔離級別和傳播行為

size medium 事務的隔離級別和傳播行為 事務的隔離級別 資料庫系統提供了4種事務隔離級別,在這4種隔離級別中,serializable的隔離級別最高,read uncommitted的隔離級別最低 read uncommitted 讀未提交資料 會出現髒讀 read committed 讀...

Spring 事務隔離級別和傳播行為

名詞 含義原因 髒讀乙個事務讀取了另乙個事務還沒有提交的資料 乙個事務對某資料進行更新,但並未提交,另一事務讀取到了該資料,但是前乙個事務如果回滾,那麼後乙個事務就讀取到了錯誤資料 不可重複讀 乙個事務多次讀取同乙個資料,結果不同 乙個事務在2次讀取某資料之間時,另乙個事務對資料進行了更新,導致前乙...