數據庫事務的四種隔離模式


四種隔離模式主要是用來解決不同線程的事務造成的幾種問題:

1.修改丟失:兩個事務A,B對同一數據同時進行讀取與修改,出現事務B 覆蓋事務A的提交結果

2.臟讀:事務A讀到事務B修改卻未提交的數據,事務B回滾數據修改操作,導致了事務A獲得數據是臟數據(也可以理解為事務A獲取的數據與數據庫中存儲的數據是不一致的)

3.(不可重復讀)虛讀:事務A先讀取某一行數據,事務B對改行數據進行修改,事務B再一次讀取該行數據時就會造成前后兩次讀取結果不一致。

4.幻讀:事務A讀取某段數據,事務B對其進行插入或者刪除操作時,當事務A重新讀取該段數據時會造成前后兩次查詢的數據不一致,出現第一次比第二次多或者少的現象。

為了解決上面的問題,出現了四種事務隔離模式

1.Read uncommitted(未授權讀取、讀未提交):(排他寫鎖)同一時間只允許一個事務進行寫操作的存在,可以允許多個事務進行讀取。可以解決(修改丟失)的問題,但是會出現臟讀,虛讀,幻讀這些問題

2.Read committed(授權讀取、讀提交):(排他寫鎖、瞬間共享讀鎖)同一時間只允許一個事務進行寫操作禁止其他事務進行讀與寫,可以解決(修改丟失,臟讀)不能解決虛讀,幻讀

3.Repeatable read(可重復讀取):(排他寫鎖、共享讀鎖)同一時間只允許一個事務進行寫操作禁止其他事務進行讀與寫,同一時間一個事務讀取的時不允許其他事務進行寫(可以讀取)。可以解決(修改丟失,臟讀,虛讀),但不能解決幻讀。

4.序列化:事務只能一個一個按照序列來進行讀寫,這樣並發性性能不高,可以解決上面4個問題。

大多數數據庫的默認級別就是Read committed,比如Sql Server , Oracle。
Mysql的默認隔離級別就是Repeatable read。
Oracle支持2種事務隔離級別:READ COMMITED,SERIALIZABLE.
Mysql支持4種事務隔離級別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM