thinkphp5乐观锁抢购
乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。
```
DB::name('goods_order')->startTrans();
$check = DB::name('goods_list')->field('goods_name,goods_number,sold_number')->where('id',1)->find();
$num = $check['goods_number'];
$version = $check['sold_number'];
$res = Db::name('goods_list')->where('id',1)->where('sold_number',$version)->update(['goods_number'=>$num-1,'sold_number'=>$version+1]);
$time = time();
$sql = "INSERT INTO `goods_order` ( `sid`, `order_sn`, `username`, `goods_id`) VALUES (1, '20220123180655265788', '1381646', 1)";
$res2 = Db::name('goods_order')->execute($sql);
if($res && $num > 0 && $res2){
DB::name('goods_order')->commit();
}else{
DB::name('goods_order')->rollback();
}
```