四種隔離模式主要是用來解決不同執行緒的事務造成的幾種問題:
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種事務隔離級別,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/39270.html
標籤:SQL Server
