两个事务-----事务A-------
begin tran
select *from  [TestDB].[dbo].tb_score with(updlock,rowlock) where id=3
   waitfor delay '00:00:10'   --延迟10秒读取
update  [TestDB].[dbo].tb_score set score=score+1  where id=3
commit TRANSACTION-----事务B-------
SET TRANSACTION ISOLATION LEVEL READ committed 
begin tran
select *from  [TestDB].[dbo].tb_score with(updlock,rowlock) where id=3
commit TRANSACTION
我的理解是,事务A运行的时候,对id=3的加了行锁,还有更新锁,更新锁的话一定要等到事务运行完才能再被获取。
因此事务A运行的时候,事务B也马上运行,但是事务B也要对改行获取更新锁,因此被阻塞在此,所以最后运行的结果是A运行完了B在运行。以上一切正常但是把事务B改成-----事务B-------
SET TRANSACTION ISOLATION LEVEL READ committed 
begin tran
select *from  [TestDB].[dbo].tb_score with(updlock,rowlock) where id=1
commit TRANSACTION
事务B对id=1的行加锁。
那么我的理解是,既然事务A加锁的对象是id=3的行,那么和事务B根本不会有什么冲突。但是事实上,运行事务A后马上运行B,发现事务B也会被阻塞。并且事务A还会发出异常错误:说是检测到死锁。
Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.本人愚钝,百思不解,求专家指教。