超卖问题

2018-10-04  本文已影响0人  越过_1b61

1.当库存还剩一个时,同一个数据AB同时来访问时就会超卖问题。

数据库深层是:同一个数据,对于数据库来说加了隐式锁是不能同时写的,但是A写的时候,B却可以读。

解决办法:

可以对读操作加上显式锁,比如Select...for update.但是这样会产生效率问题,所以可以设置一个值,当少于这个值就会加锁。

可以加上一个乐观锁,更新库存时就要更新versionid,若两个用户同时使得versionid=3并提交就会使一个事务必然回滚。

数据库表设计:task有三个字段,有id,value,version

先读task表的数据,得到的value为versionvalue。

每次更新的时候,需要这样:update task set value=newvalue,version=versionValue+1 where version=versionValue;

上一篇 下一篇

猜你喜欢

热点阅读