现在在设计一个库存管理的程序。出库的时候存在并发的问题,
两个客户端A和B, 同时进行货品SKU001的出库操作,
库存表INVENTORY中数量为100,A和B同时出60,这样的话,只能有一个客户端可以完成此次操作。    请问如何来控制上面的并发操作? 
还是交给数据库去处理?    如果用交易来处理的话,意味着,最先保存的客户端获得保存,而其它的客户端将回滚。
    而我想,当两个客户端准备去修改一条库存记录时,系统保存最先开始的那个客户端的操作。这是否意味着,当一个客户端准备改动这条记录时,应该手工将这条记录锁定?

解决方案 »

  1.   

    根据情况不同
    1 比如A B两个人分别入库自己购买的同一种物品,大家只是添加和减少,可以不报错,直接save后全部运行将 100+60+60=220
    2 如果是并发更改,应该是报错,让用户来决定是否进行觉得最好都用报错回滚,由用户决定是否再重新开始事务
      

  2.   

    yesxwl,将数据库隔离等级为最高后,第一个客户查询到某记录后,该记录将被锁定,如果他一直没有提交这个操作的话,那么,其它客户将不会看到这条记录。如此,并发性会很低
      

  3.   

    1 你可以用holdlock 共享锁,这样所有的都可以看到,但没有能改动
    2 但1可能造成修改数据的进程饿死,所以,查询以后最好马上打开锁,而在修改的时候用独占锁(最好是行级锁)可以防止其他进程在修改过程中对该纪录的访问
      

  4.   

    你用sql还是TDB控件?如果你用全用TDB控件的话可以不用管隔离级
      

  5.   

    firetoucher(风焱)如何判断客户端是做查看,还是做修改? 而且他做了修改,也可能放弃。