理解Sql Server 事務隔離層級(Transaction Isolation Level)


關於Sql Server 事務隔離級別,百度百科是這樣描述的

隔離級別:一個事務必須與由其他事務進行的資源或數據更改相隔離的程度。隔離級別從允許的並發副作用(例如,臟讀或虛擬讀取)的角度進行描述。

隔離級別共5種:

read uncommitted | 0 未提交讀
read committed | 1 已提交讀
repeatable read | 2 可重復讀
serializable | 3 可序列化
snapshot 快照(2005版本以后新加)

以下面的圖為例,在事務A中會根據條件讀取TABLE1,且讀兩次,事務B中會對同樣的表TABLE1同樣的條件進行UPDATE,在對表數據更新時會獲得排他鎖直至事務提交,

這樣在事務A中如果設置不同的隔離級別就會有不同的效果。

1、隔離級別設置為read uncommitted,允許臟讀,不管事務B何時Commit,事務A中的SELECT語句2都可以讀出數據(有可能是臟數據,因事務B可能會ROLLBACK),且與語句1的數據不同。

2、隔離級別設置為read committed,不允許臟讀,但允許“不可重復讀”,即事務A中可以多次讀,不管事務B中是否Commit,如果SELECT語句3執行時事務B還沒有Commit,讀取結果與SELECT 語句1相同,反之則不同。

3、隔離級別設置為repeatable read,不允許臟讀,也不允許“不可重復讀”,但允許”幻讀“,示例中,事務A中的SELECT語句3的執行一定要等到事務B Commit之后才能執行成功。

4、隔離級別設置為serializable,這是最高級別的隔離,串行化讀,事務只能一個一個執行,避免了臟讀、不可重復讀、幻讀。

5、隔離級別設置為snapshot ,讀取數據時,可以保證讀操作讀取的行是事務開始時可用的最后提交版本。這意味着這種隔離級別可以保證讀取的是已經提交過的數據,並且可以實現可重復讀,也能確保不會幻讀。


免責聲明!

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



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