相关疑难解决方法(0)

对UPDLOCK,HOLDLOCK感到困惑

在研究Table Hints的使用时,我遇到了这两个问题:

这两个问题的答案都说,在使用时(UPDLOCK, HOLDLOCK),其他进程将无法读取该表上的数据,但我没有看到这一点.为了测试,我创建了一个表并启动了两个SSMS窗口.从第一个窗口,我运行了一个使用各种表提示从表中选择的事务.当事务正在运行时,我从第二个窗口运行了各种语句,看看哪些会被阻止.

测试表:

CREATE TABLE [dbo].[Test](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Value] [nvarchar](50) NULL,
 CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

从SSMS窗口1:

BEGIN TRANSACTION

SELECT * FROM dbo.Test WITH (UPDLOCK, HOLDLOCK)
WAITFOR DELAY '00:00:10'

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

从SSMS窗口2(运行以下之一):

SELECT * FROM dbo.Test
INSERT dbo.Test(Value) VALUES ('bar')
UPDATE dbo.Test SET Value = …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server concurrency locking sql-server-2008

85
推荐指数
2
解决办法
10万
查看次数

HOLDLOCK对UPDLOCK有什么影响?

我已经看到很多HOLDLOCK提示与UPDLOCK结合使用的例子(像这样).但是Microsoft的这些提示的文档使得看起来HOLDLOCK应该是多余的,因为UPDLOCK已经持续锁定直到事务结束.(似乎也说HOLDLOCK只适用于共享锁.)

如果有的话,HOLDLOCK如何影响查询?

t-sql sql-server locking

30
推荐指数
2
解决办法
4万
查看次数