首页 > 代码库 > lock(3)——更新锁(U)与排它锁(X)

lock(3)——更新锁(U)与排它锁(X)

以下文章中详细介绍了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));GODECLARE @id int;SET @id = 0;WHILE @id <5BEGIN;     SET @id = @id + 1;     INSERT dbo.tb VALUES( @id, b + RIGHT(10000 + @id, 4), c + RIGHT(100000 + @id, 4) );END;BEGIN TRANUPDATE 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 TRANUPDATE dbo.tb SET c2 = xx WHERE c1 = 1;ROLLBACK;

profile中的追踪情况如下: