informix行锁
这两天一直有个疑惑,google找了好久还是不解在一个事务中根据主键更新了一条记录的一个字段,在该事务没有提交前,其他事务不能修改该表中的任何一条记录,表我已经设置成行级锁了
回复 #1 sunwenxiong 的帖子
行级锁,仅限该行......不是该表..回复 #2 liaosnet 的帖子
我也是这么觉得,但是试验结果就是我所说的那样,一个事务锁了一条记录,其他事务就不能锁该表的其他记录了数据库版本:Informix Dynamic Server 2000 Version 9.21.UC3
[ 本帖最后由 sunwenxiong 于 2008-12-9 15:57 编辑 ] 你怎么操作的只锁着一条记录?
正常更新一条记录应该很快的,很难捕捉的到的。 如果用lock table在事务里面,当然就是锁的整个表,所以不知道你怎么操作保持这个锁,而且只锁着一条记录。
回复 #4 wuicpp 的帖子
我们一个功能需要在通信成功之后做相关的业务处理,客户要求把业务处理提前到通信前面做,通信放在最后,通信成功则提交事务,通信失败则回滚事务,业务处理部分就是简单的修改业务主表的一些标志,由于整个事务必须等到通信完毕才提交,所以整个事务时间可能长一点时间才提交,目前采用多线程处理这种任务,每个线程在处理业务这部分的时候,发现每个线程因为锁表而互相等待,问题就是一个线程启动一个事务修改业务主表一条记录标志,另外的线程必须等到该线程通信完毕提交了事务才能继续修改业务主表中的其他记录标志,实质上就失去了多线程处理的意义回复 #5 wuicpp 的帖子
我没有采用lock table的方式去锁整个表,就是普通的启动一个事务,然后update业务主表的一条记录的某个字段,数据库隔离级别使用可重复读 可重复读?你疯了干嘛不用commit read?
回复 #8 wolfop 的帖子
今天回复的时候隔离级别写错了,隔离级别就是采用默认的方式read commit 最简单的验证方法是:你使用dbaccess-》begin work;update其中一条记录-》检查同时是否可以修改该表的其他数据如果你实在想知道你的表上到底有什么锁,请提供oncheck -pt database:tablename和onstat -k信息
页:
[1]