T-SQL筆記41_Isolation Levels4種悲觀鎖定隔離等級介紹

 SQL Server 資料庫引擎支援悲觀(Pessimistic)的isolation level:

READ UNCOMMITTED(未提交讀) : 完全沒有隔離效果,可能讀取其他交易進行中尚未被COMMIT的資料。(隔離事務的最低層級,只能保證不讀取物理上損壞的資料)
READ COMMITTED (已提交讀): 不允許讀取尚未COMMIT的資料,因為尚未被COMMITTED的資料可能隨時會再變。
REPEATABLE READ(可重複讀) : 在查詢中所讀取的資料會被鎖定,以免被其他使用者更改或刪除,以保證在交易中每次都可以讀到相同的資料。但是,仍然允許其他使用者對資料表的新增資料作業。
SERIALIZABLE(可序列化) : 在查詢中所讀取的資料會被鎖定,以免被其他使用者更改或刪除,以保證在交易中每次都可以讀到相同的資料。但是,仍然允許其他使用者對資料表的新增資料作業。
隔離等級中途讀取 (Dirty read)非可重複讀取幽靈 (Phantom)
READ UNCOMMITTED 
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE


其中READ COMMITTED為SQL Server Database Engine的預設交易隔離層級。
可以用 set transaction isolation level等指令去設定交易的Isolation Level。
自SQL Server 2005以後又引進了
「讀取認可快照(READ_COMMITTED_SNAPSHOT)」
「快照集隔離(SNAPSHOT isolation)」
設定語句如下:

SET TRANSACTION ISOLATION LEVEL

    { READ UNCOMMITTED

    | READ COMMITTED

    | REPEATABLE READ

    | SNAPSHOT

    | SERIALIZABLE

    }
所謂的悲觀鎖定(Pressimistic Lock)即資料庫引擎認為更新資料期間,其他的使用者也會同時來存取相同資料,所以為了確保資料的正確性,在資料的操作一關始時,即立即鎖定資料,直到操作結束才釋放鎖定。 
相對概念樂觀鎖定(Optimistic Lock)即資料庫引擎認為更新資料期間,不會有其他的使用者會來存取相同資料,因此不對資料進行鎖定,讓存取的速度可以加快。 


Ref:
[SQL] 使用 交易隔離等級 鎖定資料表動作
如何使用快照集隔離來降低鎖定問題的發生
Locking/Blocking

DIY Example
SQL SERVER的鎖機制(三)——概述(鎖與交易隔離等級)
Compare Repeatable Read and Serializable SQL Server Transaction Isolation Levels
SQL Server Isolation Levels with examples

留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題