PHP TP5 事务回滚及原理

5 篇文章 0 订阅
    public function roback()
    {
        Db::startTrans(); // 启动事务
        try{
            $b = Db::table('test1')->where(array("d_id"=>100))->delete();
            // 提交事务
            if ($b == 0) {
                throw new \Exception("错误信息");
            }
            Db::commit();  //事务提交
            dump($b);
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            // 获取提示信息
            dump($e->getMessage());//打印错误信息
        }
    }

进行事务处理的时候,MySQL 在开始事务时会切换到一个延缓操作的状态,这个状态下操作并不都是立即执行的(通常情况下语句是立即执行的)。而在 commit 时,会将延缓执行的操作都执行进去,并将状态回归到及时写入状态。同样的, rollback 时会把延缓写入的操作抛弃掉,此间申请的锁释放掉,并将状态回归到及时写入状态。
执行 rollback 的关键在于释放 申请的锁 和 回归及时写入状态,而并不是放弃未写入的操作,有时候你不执行 rollback ,影响并不会马上提现,毕竟你下一次调用 startTransaction 的时候还是会重置一下状态。但是如果你在事务之中申请了锁,或者是其他一些关联操作,那就会响应你其他与之关联操作的执行。这就好比是关闭程序,rollback 是正常的关闭流程,你不执行 rollback 就好像是强行关闭程序,难免发生奇怪的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值