[已解决问题] 关于数据库锁的问题
提问时间: 2008-02-19 09:14
悬赏分:5 浏览:679 次
begin tran
update [user] set fnc='xue' where userid=20361
waitfor delay '00:00:10'
commit tran
-----------------------事务1



select  * from [user] where userid=888888
-----------------------事务2

当事务1没有执行完成的时候事务2是不允许执行的,也就是说update 一条记录的时候也是下表级的排它锁,我就感到很怪了,MSSQL为什么不下行级锁呢?这样不是可以减少锁的粒度吗?有谁可以解释一下。。。。
提问者:ITAres - 初学一级
最佳答案
userid是主键+索引的话应该是行级锁啊,否则就需要遍历然后就是页级锁,然后遍历完一个释放一个。临时解决方法你可以在select语句里加with(nolock),这样可以忽略锁。
2008/2/23 16:29:25 回答者:Jeffrey Zhao


提问者对于答案的评价:老赵正解
其它回答(1)
学习中.......................
7个月前   回答者:@高超 - 小虾三级
评论
7个月前   ITAres :
老赵。。快出来帮我
7个月前   ITAres :
自己来回答
如果userid是索引的话,就不会有这种情况。。。
MSSQL2005默认是行级锁


   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关内容

相关链接