ron*_*yoh 4 sql-server-2008-r2
我有一个表要更新,在 where 子句中没有索引,所以我在更新脚本中使用 ROWLOCK,希望获得行锁而不是表锁,但没有运气..那么 ROWLOCK 的功能是什么?我在 select 语句中使用它但仍然锁定整个表......太烦人了!
DBCC TRACEON (-1, 3604, 1200)
开始传输
更新 [订单]
与(行锁)
设置产品 ID = 3
客户 ID = 1
跟踪输出:
DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。
进程 54 在 OBJECT 上获取 IX 锁:16:229575856:0 (class bit2000000 ref1) 结果:OK
进程 54 在 PAGE: 16:1:196 (class bit0 ref1) 上获取 IU 锁结果:OK
进程54在RID上获取U锁:16:1:196:0(class bit0 ref1)结果:OK
进程 54 在 PAGE: 16:1:196 (class bit2000000 ref0) 上获取 IX 锁结果:OK
进程 54 在 RID: 16:1:196:0 (class bit2000000 ref0) 上获取 X 锁结果:OK
进程 54 在 RID 上释放锁定引用:16:1:196:0
进程 54 在 RID 上获取 U 锁:16:1:196:1(class bit0 ref1)结果:OK
进程 54 在 RID 上释放锁定:16:1:196:1
进程 54 在 PAGE 上释放锁定引用:16:1:196
(1 行受影响)
您ARE获得行锁!
请参见了解锁定在SQL Server理解为什么ROWLOCK更新必须获得分层意向锁,为的解释Process 54 acquiring IU lock on PAGE: 16:1:196 (class bit0 ref1) result: OK。