方法1 UPDATE t_goods SET num = num - #{buyNum} WHERE id = #{id} AND num - #{buyNum} >= 0 AND STATUS = 1
方法2 UPDATE t_goods SET num = num - #{buyNum} WHERE id = #{id} AND num>=#{buyNum} AND STATUS = 1
不建议使用版本号更新的方式
版本号的方法并不是适用于所有的乐观锁场景。举个例子,当电商抢购活动时,大量并发进入,如果仅仅使用版本号或者时间戳,就会出现大量的用户查询出库存存在,但是却在扣减库存时失败了,而这个时候库存是确实存在的。想象一下,版本号每次只会有一个用户扣减成功,不可避免的人为造成失败.