天天看點

SQL SERVER中UPDLOCK ,READPAST使用

SQL SERVER中中擷取不重複資料:

READPAST

指定資料庫引擎不讀取由其他事務鎖定的行。在大多數情況下,這同樣适用于頁。如果指定了 READPAST,則行級鎖和頁級鎖都将被跳過。也就是說,資料庫引擎将跳過這些行或頁,而不是阻塞目前事務直到鎖被釋放。例如,假設表 T1 包含一個單精度整數列,其值為 1、2、3、4 和 5。如果事務 A 将值 3 更改為 8,但尚未送出,則 SELECT * FROM T1 (READPAST) 将生成值 1、2、4 和 5。使用 SQL Server 表實作工作隊列時,READPAST 主要用于減少鎖定争用。使用 READPAST 的隊列讀取器會跳過被其他事務鎖定的隊列項,跳至下一個可用的隊列項,而不是等待其他事務釋放鎖。

可為 UPDATE 或 DELETE 語句中以及 FROM 子句中引用的任何表指定 READPAST。如果 READPAST 是在 UPDATE 語句中指定的,則僅當讀取資料以辨別要更新的記錄時才應用 READPAST,而不考慮語句中指定 READPAST 的位置。不能為 INSERT 語句的 INTO 子句中的表指定 READPAST。使用 READPAST 的讀操作不會發生阻塞。讀取外鍵或索引視圖或者修改輔助索引時,使用 READPAST 的更新或删除操作可能發生阻塞。

僅可在運作于 READ COMMITTED 或 REPEATABLE READ 隔離級别的事務中指定 READPAST。在從 SNAPSHOT 隔離級别操作的事務中指定時,READPAST 必須與需要鎖的其他表提示(例如,UPDLOCK 和 HOLDLOCK)組合。

希望以上分享對初學朋友有些幫助,謝謝!

或者直接用手機掃描二維碼檢視更多博文:

SQL SERVER中UPDLOCK ,READPAST使用