laravel学习笔记--事务处理

本文详细介绍了在 Laravel 框架中如何使用数据库事务,确保数据一致性。通过DB::transaction方法,可以轻松实现回滚和提交操作,避免异常导致的数据不一致。当遇到死锁时,可以设置重试次数来解决。示例展示了在删除文章及其关联评论时如何使用事务,确保操作原子性。手动事务管理则允许更精细的控制,包括开始、提交和回滚事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库事务

可以使用 DB facade 的 transaction 方法在数据库事务中运行一组操作。如果事务的闭包 Closure
中出现一个异常,事务将会回滚。如果事务闭包 Closure 执行成功,事务将自动提交。一旦你使用了 transaction ,
就不必担心手动回滚或提交的问题

换句话说,如果在处理过程中发生了异常,就会回滚到处理之前
比如,在删除一篇文章时,删除了一篇文章的话,是不是还要删除与它相关的评论,如果在删除文章过程中发生了异常,那么这些评论就会造成数据堆积,造成大量的垃圾数据,就会拖慢我们的服务器运行,所以,使用事务可以处理这些问题

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
});

死锁

transaction 方法接受一个可选的第二个参数 ,该参数用来表示事务发生死锁时重复执行的次数。一旦定义的次数尝试完毕,就会抛出一个异常

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
}, 5);

手动使用事务

有时候我们不需要使用闭包的方式,我们需要的是自己去控制数据提交和事务处理,那么,就会使用到手动使用事务

如果你想要手动开始一个事务,并且对回滚和提交能够完全控制,那么你可以使用 DB Facade 的 beginTransaction 方法

手动使用事务的话,是要自己开启事务的

DB::beginTransaction();//开启事务

手动使用事务流程

//手动使用事务
        DB::beginTransaction();//开启事务
        try {
            //这里是数据库操作,一旦这里发送错误,
            //就会抛出异常,就不会到提交那一步
            //提交数据--无异常才可以提交
            DB::commit();
        }catch (\Exception $e){
            //进行回滚操作
            DB::rollBack();
        }

例如,我删除文章的同时再删除评论

	//开启事务
        DB::beginTransaction();
        try {
            //删除博客
            $blog->delete();
            //删除博客相关评论
            $blog->comments()->delete();
            //提交事务
            DB::commit();
            return response()->api('删除成功');
        } catch (\ Exception $e) {
        	//回滚
            DB::rollBack();
            return response()->api('删除失败', 400);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值