最近我經歷了SQL服務器中的提示和鎖定。雖然谷歌關於這個話題,我已經閱讀了一個博客,其中一些查詢已被寫入,我不打包理解。這是當UPDLOCK在SQL服務器中發佈時?
BOL狀態:在讀取表時使用更新鎖而不是共享鎖,並保持鎖直到語句或事務結束。我在翻譯這個時遇到了一些麻煩。這是否意味着更新鎖在執行SELECT語句後被釋放,除非事務中的SELECT語句?
我換句話說,我的假設在以下2種情景中是否正確?
方案1:沒有交易
SELECT something FROM table WITH (UPDLOCK)
/* update locks released */
方法2:交易
BEGIN TRANSACTION
SELECT something FROM table WITH (UPDLOCK)
/* some code, including an UPDATE */
COMMIT TRANSACTION
/* update locks released */
示例場景2(簡稱爲計算器博客)
BEGIN TRAN
SELECT Id FROM Table1 WITH (UPDLOCK)
WHERE AlertDate IS NULL;
UPDATE Table1 SET AlertDate = getutcdate()
WHERE AlertDate IS NULL;
COMMIT TRAN
請幫助理解以上查詢。
我的第二個問題是:一旦執行select語句同時完成UPDLOCK
得到釋放或沒有?
實際上,在場景1中,說「沒有事務」並不完全正確 - 您只有'SELECT'語句具有**隱式*事務 - 一旦SELECT語句返回,因此在完成隱式事務 –