当前位置:Gxlcms > 数据库问题 > SQL2005中的事务与锁定(七) - 转载

SQL2005中的事务与锁定(七) - 转载

时间:2021-07-01 10:21:17 帮助过:3人阅读

table ta(id int,col varchar(10)) create table tb(id int,col varchar(10)) go

查询一:

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上的锁定,行号为2025的记录我们可以看到分别获得了排它锁定(我仅说明RID,在表和页上也会相应的锁定),因为查询一行执行,那么5S后,它想更新TA,这时阻塞发生,我们从记录26可以看到SPID53的进程想要获取表TA上行的更新锁定被SPID52的进程阻塞,而进入等待状,注意这时不是死锁哦,是等待哦,紧接查询二5S过了

 

SQL2005中的事务与锁定(七) - 转载

标签:

人气教程排行