一、Uplock 更新鎖
用於可更新的資源上。防止當多個工作階段正在讀取、鎖定及後來可能更新資源時發生常見的死結。
二、ReadPast 系統會略過資料被鎖定的資料列,取回未被鎖定的資料列
以上兩個功能搭配的話,不會讓資料一直被鎖定中,如果交易發生碰撞行為時,會另外取得未被鎖定的資料,減少碰撞的機率。
視窗A:
USE joyceRemine GO SELECT TOP 10 * FROM issues WITH (UPDLOCK,READPAST) order by # asc WAITFOR DELAY '00:00:30' ROLLBACK |
同時另開新視窗
視窗B:
SELECT TOP 10 * FROM issues WITH (UPDLOCK,READPAST) order by # asc |
結果如下 : 視窗B撈出另外10筆資料,不會與A視窗的資料重複
視窗A 視窗B
BEGIN TRANSACTION Transaction1 UPDATE issues SET 更新日期 = GETDATE() WHERE # in (SELECT TOP 10 # FROM issues WITH (UPDLOCK,READPAST) order by # asc ) WAITFOR DELAY '00:00:10' COMMIT |
沒有留言:
張貼留言