比如对一个表中的A记录的B字段进行操作--------这个操作是并发的!
这个操作过程是这样的:
1.先取出A记录B字段。
2.根据我们的大量计算公式----这个公式是非常复杂的,无法在sql中计算只能取出数据在进行计算!
3.这时在将计算的结果写入A记录B字段!存在的问题:
如果两个客户同时取出A记录B字段的数据,这时它们的数据都是一样的了,这样进行计算后的结果在写入数据库-----它的数据就是脏数据,应该是一个串行过程序,但是我们又要求大并发,响应数据快!我不知道这样问题怎么解决,请各位高手指点一下,我试过很多方案都不行,很难做到大并发!

解决方案 »

  1.   

    为什么要随机呢,用序列不行?
    每条记录的编号,只要有新的记录,id号就自动加1用序列来实现
    --建序列:
    create sequence seq_name
    increment by 1
    start with 1
    maxvalue 99999999999
    nocycle
    cache 10--调用:
        insert into table(id,name) values(seq_name.nextval,'名字');
      

  2.   

    这个容易,在你对a记录的b字段进行修改以前,先将此记录锁住,  select。  for update nowait
    然后进行修改,修改完以后,将a记录里面的某个扳本控制字段加一
    这样另外一个用户如果仍然对a记录要进行修改时,由于a记录的版本已经加了一,与此用户先前取得的版本不一致,那么此用户就无权修改