请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用where条件避免超售

假如用户秒杀了n件商品,库存表为t_stock,库存剩余字段为num,可不可以这样:
update t_stock set num=num-n where num>=n
如果执行该语句返回的结果为0,表示没有秒杀到,如果返回结果为n,表示秒杀成功

正在回答 回答被采纳积分+3

1回答

神思者 2020-02-29 12:03:53

你这种单条sql语句没问题,但是要结合到一个事务里面看,比如说修改库存和生成订单要在同一个事务里面,这就容易出现订单生成了下,但是超售了。或者订单生成了,没减库存,你这个sql就会出现这个情况。

0 回复 有任何疑惑可以回复我~
  • woy #1
    老师, 我想问下, 在事务里, 如果先执行update库存, 然后对结果做if判断, true就生成订单, false就return. 这种会有问题么?
    回复 有任何疑惑可以回复我~ 2020-03-11 17:24:28
  • 神思者 回复 woy #2
    只要是两条sql就会有问题
    回复 有任何疑惑可以回复我~ 2020-03-11 22:32:07
  • ahhhgxhhh 回复 神思者 #3
    发现库存不够减,不就把订单表操作回滚了,这样也有问题吗?
    回复 有任何疑惑可以回复我~ 2022-07-05 01:18:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信