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  阅读(887)  评论(0编辑  收藏  举报

导航