多个用户可能对同一个账户做支取操作,为了保证账户不透支,需要在支取(插入一条支取记录)之前做账户的余额检查,这个地方需要做同步处理。整个过程是用Oracle的存储过程实现的,请问如何实现能保证并发?DBMS_LOCK建议使用么?还有别的方法么,比如在余额检查前取出账户余额,插入支取记录再取一次余额,比较两次记录?

解决方案 »

  1.   

    select ..... for update不能满足要求???
      

  2.   

    是插入一条记录,过程较复杂。所以select...for update不能满足。
      

  3.   

    不太明白,你首先是要更新记录,如果更新成功才能插入操作记录首先查询 SELECT .... FOR UPDATE...
    判断有余额,则取钱,UPDATE ...SET 总金额=总金额-取钱数  ....
    然后插入当前取钱记录  INSERT .....value  取钱数
    无异常则,提交....释放 UPDATE锁...
      

  4.   

    使用串行化事务隔离级别
    set transaction isolation level serializable
      

  5.   

    谢谢回复。我对select for update不熟练,再研究下。准备加一个版本列使用乐观锁实现。使用串行化事务隔离级别肯定不行啊。