sqlserver的updlock鎖 (轉(zhuǎn))
UPDLOCK
讀取表時(shí)使用更新鎖,而不使用共享鎖,并將鎖一直保留到語句或事務(wù)的結(jié)束。UPDLOCK 的優(yōu)點(diǎn)是允許您讀取數(shù)據(jù)(不阻塞其它事務(wù))并在以后更新數(shù)據(jù),同時(shí)確保自從上次讀取數(shù)據(jù)后數(shù)據(jù)沒有被更改。
這是SqlServer2000中對(duì)更新鎖的說明.
當(dāng)我們用UPDLOCK來讀取記錄時(shí)可以對(duì)取到的記錄加上更新鎖,從而加上鎖的記錄在其它的線程
中是不能更改的只能等本線程的事務(wù)結(jié)束后才能更改,我如下示例:
BEGIN TRANSACTION --開始一個(gè)事務(wù)
SELECT Qty
FROM myTable WITH (UPDLOCK)
WHERE Id in (1,2,3)
UPDATE myTable SET Qty = Qty - A.Qty
FROM myTable AS A
INNER JOIN @_Table AS B ON A.ID = B.ID
COMMIT TRANSACTION --提交事務(wù)
這樣在更新時(shí)其它的線程或事務(wù)在這些語句執(zhí)行完成前是不能更改ID是1,2,3的記錄的.其它的都可以修改和讀,1,2,3的只能讀,要是修改的話只能等這些語句完成后才能操作.從而保證的數(shù)據(jù)的修改正確.
讀取表時(shí)使用更新鎖,而不使用共享鎖,并將鎖一直保留到語句或事務(wù)的結(jié)束。UPDLOCK 的優(yōu)點(diǎn)是允許您讀取數(shù)據(jù)(不阻塞其它事務(wù))并在以后更新數(shù)據(jù),同時(shí)確保自從上次讀取數(shù)據(jù)后數(shù)據(jù)沒有被更改。
這是SqlServer2000中對(duì)更新鎖的說明.
當(dāng)我們用UPDLOCK來讀取記錄時(shí)可以對(duì)取到的記錄加上更新鎖,從而加上鎖的記錄在其它的

BEGIN TRANSACTION --開始一個(gè)事務(wù)
SELECT Qty
FROM myTable WITH (UPDLOCK)
WHERE Id in (1,2,3)
UPDATE myTable SET Qty = Qty - A.Qty
FROM myTable AS A
INNER JOIN @_Table AS B ON A.ID = B.ID
COMMIT TRANSACTION --提交事務(wù)
這樣在更新時(shí)其它的線程或事務(wù)在這些語句執(zhí)行完成前是不能更改ID是1,2,3的記錄的.其它的都可以修改和讀,1,2,3的只能讀,要是修改的話只能等這些語句完成后才能操作.從而保證的數(shù)據(jù)的修改正確.
posted on 2009-04-28 16:04 freebird 閱讀(349) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫