问题是这样的:有一个oracle数据库,多个程序都会去对它操作(insert,update,delete,select等等),我现在用jdbc连接了oracle进行操作,当我要更新某个表A的某条记录时(是先select出来相应的字段,再更具这个值进行各自相应的update),是不是要把它锁定阿,以免在select与update之间其他程序也对此条记录进行操作,导致数据不一致?在c中用select for update 可以把返回的结果记录集合都锁定。在java中,该怎么搞呢?也是这样吗?谢谢
解决方案 »
- ado 如何取完整的命令串
- 请高手帮我看看这个sql语句!!!!!!!!!!!!!!!!!!
- 查询包括多个Blob字段,导出Excel,请教一下,特急谢谢
- 请问如何通过jdbc得到oracle的rowid
- 一个常见的简单查询!
- 求一句将查询结果立即插入到一表中的SQL
- 日期时间段的sql,怎么写?
- 这个触发器错到哪儿了
- oracle的存储过程为何老是掉下来?
- 是否有自增字段?如果没有我想要一个ID字段作为表的关键字,该怎么设定这个ID呢?
- 怎样学好Oracle数据库?该学习的东西很多,但是应该学习写什么为好
- 关于如何在oracle下如何通过查系统表得到某个表相关信息问题?请大家帮忙看看。谢谢。
只和数据库相关 . 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这个事务级别,我网上查资料都说效率影响很大,因为事务都是串行运行了。但是不知道具体有多少影响?小弟对这个概念不是很深刻?大哥不忙的话能说说吗?