为了防止多人同时更改数据,采用select * from tablename for update语句,当我在修改的时候,通过这条语句把数据获取到应用程序中.那程序怎么知道我还没有提交?因为我认为,当我把数据取出来之后,我已经关闭了connection.这个连接已经不存在了.oracle怎么知道以后我采用update是我提交的呢?

解决方案 »

  1.   

    会被LOCK住的,COMMIT会释放锁,如果你断开连接,有可能锁不释放,就一直LOCK
      

  2.   

    断开之后,等用户在应用程序中修改好了数据,再连接提交,可以释放锁吗?或者如果用select ... for update,在提交修改之前,不该断开连接?请指教.
      

  3.   

    第一,你要用事务处理,不然,这句话有和没一个样。
    第二,不能用AutoCommit,一般程序这个不会开。
    第三,参照1楼说的!
      

  4.   

    这个是oracle中事务处理来处理的。
      

  5.   

    断开后,再进行连接,就是两个会话了.
    select .... from update就是悲观的加个锁,你断开连接了意味着你的会话异常关闭了,其余的要由服务器来释放了
      

  6.   

    对于oracle的DML操作,一旦你的语句还没有commit就已经断开连接了,都作为rollback处理,也就是说,你所有还没有commit的修改,将没有生效。并且服务器的pmon将会回收你的资源,并释放所有的锁对象。
    不过有些工具在logoff的时候,会默认帮你commit,所以有时感觉没有connect,退出程序却一样修改到了,这其实是工具给你做了一些事情。
    ==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    QQ群:  85837884(注明:数据库)
    电子邮件:[email protected]
    网站: http://www.inthirties.com
      

  7.   

    事务只能存在于一个连接中(分布式事务除外),连接断开,事务自动结束。
    一般而言,若没有显示commit.系统回自动rollback
      

  8.   

    用select...for update后,查看锁会发现有一个记录锁和一个表锁,当commit或rollback后,锁才会释放
      

  9.   

    for update 会请求一个锁,把相应的数据给锁住。。至于锁的信息是在rowid上有相关记录