问题是这样的:有一个oracle数据库,多个程序都会去对它操作(insert,update,delete,select等等),我现在用jdbc连接了oracle进行操作,当我要更新某个表A的某条记录时(是先select出来相应的字段,再更具这个值进行各自相应的update),是不是要把它锁定阿,以免在select与update之间其他程序也对此条记录进行操作,导致数据不一致?在c中用select for update 可以把返回的结果记录集合都锁定。在java中,该怎么搞呢?也是这样吗?谢谢
调试欢乐多
只和数据库相关 . for update就是只有你能更新,别人不能更新.
对于用select...for update来取得记录集,报oracle 的1002错误,好奇怪.
另外可能会出现select...for update 嵌套的情况,因为有3层循环.那么当里层的进行commit,或者rollback进行释放锁的时候,是不是外层的原先被锁定的记录也被释放了阿?
谢谢.现在对oracle的锁了解还不够深入!
我用select...for update的时候,其他线程虽然没法对这些数据进行更改,但是还是可以select的,所以还是会出现“丢失更新”的情况,请教如何解决这个问题???万分谢谢了
丢失更新:甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,乙也取款100元提交。最终帐户余额为100元。这就是丢失更新的问题。
你的这个办法可以,但是要这么处理的话,sql语句要该的地方比较多,因为好多程序都是以前存在的,而且也不是我负责的。我现在就是想能够在我自己负责的这部分线程处理的时候,把自己的事务隔离开来,不受其他线程的打扰,包括select。不知道有没有好的办法?
那大哥,您的意思是不是光把我的事务隔离开来没有什么办法了吗?用TRANSACTION_REPEATABLE_READ这个事务级别可以吗?jdbc如何打开这个事务隔离级别呢?再次谢谢了
对于用TRANSACTION_SERIALIZABLE这个事务级别,我网上查资料都说效率影响很大,因为事务都是串行运行了。但是不知道具体有多少影响?小弟对这个概念不是很深刻?大哥不忙的话能说说吗?