前提:数据库类型是 InnoDB,要与事务同时使用。
为啥加锁:ag:多用户同时购买同一商品时,不加锁库存会出现错误
public function text()
{
$time = date('H:i:s');
$this->startTrans();//开启事务
try{
$info = $this->lock(true)->where('user_coupon_id', 100)->find();//加锁
$info->update(['expire_day' => $info['expire_day']+10], ['user_coupon_id' => 100]);
sleep(10);
$this->commit();//事务提交
dump($time.'_lock_true_'.date('H:i:s'));
} catch (\Exception $e) {
$this->rollback();
$this->error = $e->getMessage();
dump($this->error);
dump($time.'_lock_false_'.date('H:i:s'));
}
}