我现在是一个入库表,一个库表,库存信息是一个物化视图(入库-出库),入库不存在并发操和,因为每一次的入库批次都是不一样的,现在如果A B两人个人同时做出库操作就会出现负库存的问题如:
A在出库的时候可以看到C这个货物有6件,就出库6件
但在同一个时间B也可以看到C有6件,也出6件
这样就会出现负库存,想问怎么解决这样的并发操作啊

解决方案 »

  1.   

    最簡單的,庫存數量字段加check約束>=0;或觸發器中判斷數量>=0
      

  2.   

    字段加check約束>=0!让数据库来帮你判断。如果A出库后,B接着出库,导致库存负值,则提示出库失败。
      

  3.   

    如果我锁出库表,一次只让一个事务操作,那么一个事务操和完了,第二个事务也会操作,比如库存数5 ,A事务出5,B事务也出5,A事务操作时,B事务不能操作,但A事务写完数据以后,B事务就可以操作了,我的库存表是一个物化视图,是入库-出库,只有当B事务写完数据以后才会出现负库存。如果锁物货视图(物化视图能锁吗?),A用户能看到库存信息,B用户看不到,不过这样用户体验上不太好
      

  4.   

    就算加上行级锁,当我读取时是几行一读取,每次出库的时候可能会多次读取不同的行,锁住A以后,在读B时,A就可以被其他用户读到(这是一个B/S程序程序,读取写入不在同一个事务里,我是读完H货物信息以后写到界面上,在读Y货和信息,以次类推,最后在一起把界面上的信息写到数据库里)同样会出现负库存