我用javabean  封装了一个更新数据库的bean  .  
我在update  语句后先不提交,直接断掉与数据库的连接。此时另一台客户端的进程也同时提出update同一条数据的申请,那么  
第二次的更新操作被挂起了。此种情况虽然说不容易发生,但也存在可能性。该如何避免呢?  
对于大的事务处理过程,又该如何避免更新同一条数据的互相死锁呢?

解决方案 »

  1.   

    在我看来:
    这种设计本身就是错误的,避免死锁要求事务尽量减小粒度,并且缩短事务的维持时间,不提交的做法本身就不对。
    当然传统的有序更新的方法也可以避免交叉死锁,所以在做DML操作时,注意表的更新顺序。
    注意:就算是有序更新也一样有可能挂起,缩短事务才是根本的解决方法。
      

  2.   

    如果没有提交就断开数据库连接的话,数据不回滚吗?如果回滚了,那干吗还等待啊?是不是有大量长事务频繁调用啊?还有,你这种不叫死锁,死锁是会引起数据库down的。
      

  3.   

    对于批量数据的更新建议用大小流水号来处理。
    每次处理成功后返回大流水号,然后commit;没有成功的话,根据大流水号delete掉,然后commit。