我在google上读到可以使用UPDLOCK表提示来管理死锁。但是下面的场景并没有避免死锁: -
-----session 1------------
set transaction isolation level repeatable read
begin transaction
select * from c with (updlock)
-----session 2------------
set transaction isolation level repeatable read
declare @var int = 1
begin transaction
select * from c
现在当我们回到会话1并发出更新查询时,我们将在会话2中遇到死锁。它是如何避免死锁然后没有使用updlock的。我们应该使用tablockX提示,而不允许任何类型的锁。
-----session 1------------
update c
set name = 'qwert'
where id = 1
我发现了另一个奇怪的观察结果。如果我将第一个会话中的隔离级别更改为serializable,那么updlock可以工作并避免死锁。所以我的理解是 -
有人能在这里帮助我,我很困惑