事务并发问题一直想不到好的解决方法,请帮忙
一个进销存系统,基本所有的业务都要操作库存表,增加总库存或者是减少总库存,请问当多个用户同时并发操作时,怎样保证总库存数据的正确性呢?
我自己有想到一种方法:就是在库存表增加一字段如:是否锁,当需要改变库存这个字段时,首先取出库存字段和是否锁字段,如果是否锁字段=Y 那么说明已经有人占用,提示用户等待,否则取出库存交更新是否锁字段为Y,说明已经占用,当更新完库存后再UPDATE 是否占用=N,
不知道有没其它更好的方法,或者对于事务并发我的理解错在哪?
谢谢!
一个进销存系统,基本所有的业务都要操作库存表,增加总库存或者是减少总库存,请问当多个用户同时并发操作时,怎样保证总库存数据的正确性呢?
我自己有想到一种方法:就是在库存表增加一字段如:是否锁,当需要改变库存这个字段时,首先取出库存字段和是否锁字段,如果是否锁字段=Y 那么说明已经有人占用,提示用户等待,否则取出库存交更新是否锁字段为Y,说明已经占用,当更新完库存后再UPDATE 是否占用=N,
不知道有没其它更好的方法,或者对于事务并发我的理解错在哪?
谢谢!
上面几位朋友说的我不是很清楚,关于事务并发,我查过这方面资料,DMBS允许多个事务同时操作表,这就是并发,事务并发会引起后一个用户会覆盖前一用户的值或者造成数据不完整。这就是我理解的关于事务并发方面的一点知识。通常解决事务并发的方法的加锁,但是锁会带来死锁,而且性能也很不好。yuzhantao(和女朋友一起去养狗) 的思路我很赞同很可行.用时间戳标记当做版本号,当更新库存时发现时间戳不对则提示用户刷新并退出,让他重新提交更新。
俺同意jontan的意见
例:
a与b用户先后打开c记录,b用户后发先至对c作了保存10值,而a随后保存20值,那a还是b所保存的值才是有效业务逻辑呢?后者保存时要么通知被锁,要么无法有效通知前者更改了新数值(因为a也许已结束当前事务并作其他去了!)这将导至业务逻辑出错.更何况存在更多人用户的并发操作可能,总不能给1人通过了,而99人看到一个"记录已被锁定了"的提示,这将严重使工作不流畅;
进销存软件的并发事务的概率并不高。