在页面上尝试IX锁时SQL死锁

时间:2015-03-03 13:33:31

标签: sql sql-server deadlock

我无法理解为什么会出现这种僵局。 右边的事务只影响(更新)一行,如下所示:

update table1
set column1 = 'value1'
where key1 = 1

我假设IX请求是针对行(正在更新)所在的页面,对吧?但这不可能,因为此页面上有共享锁。或者是其他页面的IX请求?

还可以防止IX锁定(可能是一些暗示)?因为我知道我只更新了一行,并且没有意图更新此交易中的任何其他内容。

更新:

表1 - 由五列(重命名)和一个主键组成:

CREATE TABLE [dbo].[Table1](
    [Key1] [int] IDENTITY(1,1) NOT NULL,
    [Column1] [nvarchar](50) NOT NULL,
    [Column2] [int] NOT NULL,
    [Column3] [nvarchar](50) NULL,
    [Column4] [int] NOT NULL,
    constraint PK_Key1 primary key([Key1])
)

另一个事务包含一个包含大量连接表的select语句,包括Table1 - 出于安全原因,我不能在此处泄露它。

1 个答案:

答案 0 :(得分:0)

有一个ROWLOCK提示。 E.g:

update table1 with (ROWLOCK)
set column1 = 'value1'
where key1 = 1