在事务中查询一个条数据,然后根据这条数据的结果再更新其他几条数据。在整个事务过程中,查询、更新的这几条数据是不是一直都被锁住。其他人访问?
解决方案 »
- 存储过程动态where条件啥处理?
- 关于如何取秒的数据
- 求一个sql语句
- 如何远程连接SQL服务器的数据库!!急,在线期待!!!!
- 记录集合并
- 急着用,关于向表中插入数据
- 怎样解决这个一对多的问题
- 高手啊:怎么将乱七八糟的如图象混文本混超链接等等,再加上泥巴和水什么的,写进数据库。等着去吃中饭呢,哪位义士知道的话,赶紧!先行谢过!
- 不知开发数据库用什么语言最好?
- sql7.0 存储过程要执行如何保证要么全部执行,要么取消,好象用事务
- MSSQL数据库转MYSQL,varchar长过255的怎么办?
- MSSql安装后,打开企业管理器查看安全性设置,身份验证是sql和windows,但帐户看不到sa用户名.为什么?
update在更新的时候会锁住一下下
declare @value int
select @value=字段值 from tbname with(xlock,paglock) where id=9
update ....
commit tran
这样select时查询的字段就会被锁住?更新后在解锁?如果不过通过SQL的事务而是程序中的事务是否也一样?
如果这个值正在被修改 上面一定有排他锁 这样你更新(+500)的操作肯定是waiting状态
如果这个值已经修改完毕 锁被收回 更新操作顺利进行
xlock设定排他级别 pagelock设定上锁范围 即id=9所在page上有完全排他锁
select @value=字段值 from tbname with(xlock,paglock) where id=9 对于只查询一条数据的为什么不使用ROWLOCK,而是paglock?ROWLOCK不是更合适?paglock会锁定多少条数据?只锁定where id=9 的数据?sql的锁一直都没用过,也没看过这方面资料,麻烦解释一下。
http://msdn.microsoft.com/zh-cn/library/ms187101.aspx
关于锁的理论我还是知道的。关键是对with(xlock,paglock)的意思不太明白,为什么不用ROWLOCK?相对于页,行应该锁住的范围更小,更加合适。
现在问的是with(xlock,paglock)的问题,请注意看回帖
sql server如果要控制rowlock,将会付出很大的代价,而且一个page页里的多个数据行在交叉操作时采用rowlock,容易产生死锁.
我觉得这个sql server一个不够强大的地方,他不能像oracle似的采用精度很细的行级锁。
如果要在是事务中禁止其他连接访问的数据用with(xlock,paglock)比with(xlock,rowlock)更合适?其他的有没有更好的办法?
用with (xlock,rowlock)时不起作用,得到的不是排它锁,只是REPEATABLEREAD锁