XLOCK TABLOCKX 区别
最近在看SQLSERVER 锁方面的内容,分享一下自己个人的感受,
欢迎大家一起讨论。
XLOCK 本身是锁住数据行的,TABLOCKX是锁住整张表。
上实例:
在第一个查询窗口写如下代码
Begin Tran
--WITH (UPDLOCK,ROWLOCK)
print CONVERT(varchar,getdate(),113)
select top 100 * FROM ATestLock with(XLOCK) where id = 28
print CONVERT(varchar,getdate(),113)
waitfor delay '00:00:10'
print CONVERT(varchar,getdate(),113)
Commit tran
在另一个窗口编写代码
update ATestLock set value = '78' where id = 28
先执行第一个窗口再执行第二个窗口,会发现需要第一个事务释放锁后 第二个窗口才进行更新操作
换成
update ATestLock set value = '78' where id = 34 后
则不需要等待就可以更新
如果把第一个窗口的代码修改一下
Begin Tran
--WITH (UPDLOCK,ROWLOCK)
print CONVERT(varchar,getdate(),113)
select top 100 * FROM ATestLock with(TABLOCKX) where id = 28
print CONVERT(varchar,getdate(),113)
waitfor delay '00:00:10'
print CONVERT(varchar,getdate(),113)
Commit tran
那么第二个窗口不论执行哪一句 都是需要等待的
posted on 2013-01-17 13:44 wanglgkaka 阅读(914) 评论(0) 编辑 收藏 举报