begin tran
update [user] set fnc='xue' where userid=20361
waitfor delay '00:00:10'
commit tran
-----------------------事务1select  * from [user] where userid=888888
-----------------------事务2当事务1没有执行完成的时候事务2是不允许执行的,也就是说update 一条记录的时候也是下表级的排它锁,我就感到很怪了,MSSQL为什么不下行级锁呢?这样不是可以减少锁的粒度吗?有谁可以解释一下。

解决方案 »

  1.   

    默认是行级锁,7.0默认是页级锁,楼主的userid是否有索引呢
      

  2.   

    更新操作最初是先找到需更新的行再做更新,如果有合适的索引,则更新操作会快些(需要权衡写索引操作)
    对于你的情况,如果ueserid是主键的话,你的那个事务不会阻塞
      

  3.   

    我感觉不管USERID是不是主键,他这边都不会被锁住啊