时间:2021-07-01 10:21:17 帮助过:3人阅读
查询一:
BEGIN TRAN UPDATE TB SET COL = ‘A‘ WAITFOR DELAY ‘00:00:05‘ UPDATE TA SET COL = ‘B‘ --COMMIT TRAN
查询二:
BEGIN TRAN UPDATE TA SET COL = ‘A‘ WAITFOR DELAY ‘00:00:05‘ EXEC SP_US_LOCKINFO –-在死锁前获取锁的信息 UPDATE TB SET COL = ‘B‘ --COMMIT TRAN
执行顺序先运行行查询一立即切换查询二执行,得死锁前的锁定信息,我们列出部分锁定信息:
由上图我们可以看得出,一开始查询一和查询二分别获得了TB TA上的锁定,行号为20和25的记录我们可以看到分别获得了排它锁定(我仅说明RID,在表和页上也会相应的锁定),因为查询一行执行,那么5S后,它想更新TA,这时阻塞发生,我们从记录26可以看到SPID=53的进程想要获取表TA上行的更新锁定被SPID=52的进程阻塞,而进入等待状,注意这时不是死锁哦,是等待哦,紧接查询二5S过了
SQL2005中的事务与锁定(七) - 转载
标签: