面临的问题
长话短说,假设我们现在面临以下需求
- 商品的库存有两千,卖完为止
- 某商品本日的售卖只允许卖出一百,卖完为止
如何实现
我提出的方案也很简单,使用乐观锁的方式。
以下是具体的方案
-- stock: 当前库存数 number:扣减的数量 --
UPDATE t SET stock -= number WHERE stock >= number
外加上事务,便可以实现一个基本的库存扣减操作。大部分情况下,无需担心所谓的“并发问题”。事务具有的特性,会在此处帮你解决的掉这个大难题。
(简单的说:事务会在执行 非查询 的操作的时候,会实现类似锁的功能。直到前面的事物提交或者回滚之前,后续的操作都会被挂住)
需求具体实现的方案
1.商品的库存两千,卖完为止
其实从理论上,想解决这个问题,只依靠上文之中的update语句便可以完成。
具体步骤如下:
- 执行UPDATE 语句,查看其结果 。
- 若是,则执行后续操作
- 若否,代码回滚
具体代码如下
//开始事务
beginTransaction();
//