使用where条件避免超售

来源:6-1 如何实现商品秒杀?(一)

慕田峪2157373

2020-02-29

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

写回答

1回答

神思者

2020-02-29

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

0
3
ahhhgxhhh
回复
神思者
发现库存不够减,不就把订单表操作回滚了,这样也有问题吗?
2022-07-05
共3条回复

阿里新零售数据库设计与实战 (升级版)

解锁“新零售”业务让数据库实战能力再上一层楼

2101 学习 · 701 问题

查看课程