以下文章中详细介绍了update操作过程中更新锁及排它锁的分配情况
http://blog.csdn.net/zjcxc/article/details/27351779
按照以上文章中的追踪方式,发现其实文章lock(2)——创建及更新表过程中SQL SERVER锁资源分配情况中我们通过sys.dm_tran_locks动态视图查询出来的结果都是最终加锁的情况,并没有体现其中锁变化的情况。如果要想详细的知道锁的变化情况,还是使用profile的方式。
我这里为了加深印象与理解,就再将邹大师的测试自己做一遍:
--该进程为64,先创建表并初始化5条数据,然后在事务中更新数据 CREATE TABLE dbo.tb( c1 int, c2 char(10), c3 varchar(10) ); GO DECLARE @id int; SET @id = 0; WHILE @id <5 BEGIN; SET @id = @id + 1; INSERT dbo.tb VALUES( @id, ‘b‘ + RIGHT(10000 + @id, 4), ‘c‘ + RIGHT(100000 + @id, 4) ); END; BEGIN TRAN UPDATE dbo.tb SET c2 = ‘xx‘ WHERE c1 = 2; WAITFOR DELAY ‘00:00:30‘; UPDATE dbo.tb SET c2 = ‘xx‘ WHERE c1 = 5; --ROLLBACK;
--进程66,开启一个事务,并更新tb表中的一条记录 BEGIN TRAN UPDATE dbo.tb SET c2 = ‘xx‘ WHERE c1 = 1; ROLLBACK;
profile中的追踪情况如下:
lock(3)——更新锁(U)与排它锁(X),布布扣,bubuko.com
原文:http://www.cnblogs.com/shihuai355/p/3851427.html