最近我经历了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语句返回,因此在完成隐式事务 –