数据库
首页 > 数据库> > MYSQL商城简单场景处理并发,防止库存超卖

MYSQL商城简单场景处理并发,防止库存超卖

作者:互联网

适用于简单商城并发场景,无需借助redis即可实现并发秒杀

// 开启事务
Db::startTrans();
try {
    // 随机购买数量
    $buyNumber = rand(2, 9); 
    // 先减少库存
    Db::table('easycms_goods')->where('id', 1)->setDec('stock', $buyNumber);
    // 查询是否超卖
    $goods = Db::table('easycms_goods')->where('id', 1)->find();
    if($goods['stock'] < 0){
       throw new \think\Exception('库存不足!');
    }
    // 秒杀成功处理
    // ...
  
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 秒杀失败处理
    // ...

    // 回滚事务
    Db::rollback();
}

PS: 大型高并发场景慎用,推荐使用redis列队处理

标签:Exception,goods,Db,并发,场景,秒杀,MYSQL,超卖
来源: https://www.cnblogs.com/lmdpx/p/14968924.html