select * from a for update本身就有问题。
它是一个悲观锁,你把锁人工扩大了。一个事务里需要处理多少数据,就锁定多少数据。
像你这样锁定整个表,本来就是你想独占此表,也就是exclusive方式。
for update where ……
仅锁顶你需要处理的记录,则其他记录可以被其他会话修改。
[Quote=引用 3 楼 suiziguo 的回复:]
1 如果你select * from a for update ,则锁定所有记录。你想再update a set status = 60 ,除非前面的事务提交,否则你想都别想!
2 querySql有ORACLE一致性读要保证,不会读取在你发起query后才提交的数据。
故你应该多看看ORACLE锁及UNDO部分的内容。
我只是告诉你,不会发生你所说的情况,不过另外一个倒是可能,那就是死锁。
死锁纯属业务逻辑问题,无论是数据库设计,还是程序逻辑,都要注意!
[/Quote]
这样说select * from a for update 的话, 我后面就没办法修改状态 了,除非前面的事件提交或roolback了
那就有什么办法解决这个问题