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

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

外貿Payment Term 付款條件(方式)常見的英文縮寫與定義

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