事务的用法

事务的概念:

1. 原子性( A ):
对于数据修改,要么全部都执行,要么全都不执行。
 
2. 隔离性( C ):
在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程。
 
3. 一致性( I ):
事务发生前和发生后,根据数据的规则,总额应该匹配。
 
4. 持久性( D ):
事务一旦被提交,其结果就是永久性的,系统崩溃也不会影响
 

 

laravel中使用事务

1、第一种方式:事务闭包

use Illuminate\Support\Facades\DB; 

DB::transaction(function () {
    //这里面写逻辑
});


2、第二种方式:常规方式

use Illuminate\Support\Facades\DB; 
//开启事务 
DB::beginTransaction();
try{ 
      //中间逻辑代码

      DB::commit(); 
}catch (\Exception $e) { 
      //接收异常处理并回滚

      DB::rollBack(); 
}


应用场景:

使用场景一般涉及到个人财务信息的时候都会使用到,比如上图的积分计算 , 还有订单购物车等
 
 
 

为啥要用到事务?

比如购买VIP会员商品支付成功后的一个操作:

1、是否减金币;2、经营者结算;3、购买vip的操作比如vip时间,身份

问题就出现了,数据库执行完1,2俩个步骤,3步骤出现错误,比如说系统奔溃了,这时候会出现bug.

用户钱被扣了,经营者拿到钱了但VIP缺没有充值成功。所以要用事务捆绑这几个动作,如果1,2,3有错误发生,则回滚数据库

                DB::beginTransaction();
                try{
                    //中间逻辑代码
                    #减金币
                    $this->PaySuccessRepo->lessBjCoin($order);
                    #经营者结算
                    $this->PaySuccessRepo->operatorsAddBjCoin($order,$user);
                    #买vip操作
                    $this->PaySuccessRepo->buyVip($user);

                    DB::commit();
                }catch (\Exception $e) {
                    //接收异常处理并回滚
                    \Log::error($e->getMessage());

                    DB::rollBack();

                    return $e->getMessage();
                }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值