資料庫之事務隔離級別簡析

2022-04-07 18:02:32 字數 967 閱讀 5994

資料庫之事務隔離級別簡析

在分布式的系統中,通常會有多個執行緒連線到資料庫中同時對乙個表進行操作(這裡的同時並不表示同乙個時間點,而是同時競爭cpu的資源,至於如何排程,就要看執行緒和作業系統如何進行排程了),這種情況下如果會話的事物設定不當,就會導致資料混亂,常常會出現以下三種情況(假設現在系統中有兩個會話a和b,同時對錶t_test操作): 

1.髒讀:假如a開啟事物後,在查詢之前,b修改了表中的某條記錄,但是事物還沒提交,這個時候a再讀取該錶時,讀到了b修改之後的資料,問題發生了:b如果此時回滾了事物,那麼a讀到的就是錯誤的資料了。 

2.不可重複讀:假如a開啟事物後,對錶做了查詢後,此時b修改了表中的某條記錄,然後a又做了一次查詢,問題發生了:對於事物a,第一次讀取的結果對應的記錄和第二次讀取的結果不一致了 

3.幻讀:假如a開啟事物後,對錶做了查詢,此時b在表中新增了一條資料,然後a又做了一次查詢,問題發生了:對於事物a,第二次讀取的結果比第一次讀取的結果多出一條記錄   www.2cto.com  

因此,在jdbc的規範中對事物隔離級別做了相應的規定。 

1.讀未提交(read uncommitted):這種隔離級別可以讓當前事務讀取到其它事物還沒有提交的資料。這種讀取應該是在回滾段中完成的。通過上面的分析,這種隔離級別是最低的,會導致引發髒讀,不可重複讀,和幻讀。 

2.讀已提交(read committed):這種隔離級別可以讓當前事務讀取到其它事物已經提交的資料。通過上面的分析,這種隔離級別會導致引發不可重複讀,和幻讀。 

3.可重複讀取(repeatable read):這種隔離級別可以保證在乙個事物中多次讀取特定記錄的時候都是一樣的。通過上面的分析,這種隔離級別會導致引發幻讀。 

4.序列(serializable):這種隔離級別將事物放在乙個佇列中,每個事物開始之後,別的事物被掛起。同乙個時間點只能有乙個事物能運算元據庫物件。這種隔離級別對於資料的完整性是最高的,但是同時大大降低了系統的可併發性。   

作者 terry_zzz

資料庫之事務的隔離級別

iso 和 anis sql 標準制定了四種事務隔離級別,而 innodb 遵循了 sql 1992 標準中的四種隔離級別 read uncommited 使用查詢語句不會加鎖,可能會讀到未提交的行 dirty read read commited 只對記錄加記錄鎖,而不會再記錄之間加間隙鎖,所以允...

資料庫學習之事務隔離級別

主要內容 一致性讀 當前讀 在讀提交隔離級別之下 事務a k 2 事務b k 3 大白話 原理 在可重複讀隔離級別之下,查詢操作所遵循的是一致性試圖中給出的資料,更新操作所遵循的是當前讀中所給出的資料。mvcc 多版本併發控制。在我的理解裡面,就是回滾操作 transaction id 在innod...

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

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