Laravel框架学习笔记之数据库事务

PHP 投稿 11200 0 评论

Laravel框架学习笔记之数据库事务

这篇关于laravel框架支持的数据库系统的文章,主要介绍Laravel框架学习笔记之数据库事务,觉得挺不错的,感兴趣的php开发者可以参考下,希望对大家在学习php的成长路上有所帮助!

关于事务的知识可参考本站:

关于数据库(MySQL)事务

关于数据库事务的一些说明

laravel框架内使用事务

想要在laravel框架中使用数据库事务中运行一连串操作,可以使用 DB 类的 transaction 方法。

使用 transaction 方法时不需要手动回滚或提交,如果事务闭包中抛出异常,事务将会自动回滚;如果闭包执行成功,事务将会自动提交。


DB::transaction(function () {
    if (!DB::table('users')->update(['votes' => 1])) {
        throw new Exception('修改失败', 1);
    }
    
    if (!DB::table('posts')->delete()) {
        throw new Exception('删除失败', 1);
    }
});

处理死锁数据库死锁指的是有两个或两个以上数据库操作相互依赖,一方需要等待另一方退出才能获取资源,但是没有一方提前退出,就会造成死锁,数据库事务容易造成的一个副作用就是死锁。为此 transaction 方法接收一个可选参数作为第二个参数,用于定义死锁发生时事务的最大重试次数。如果尝试次数超出指定值,会抛出异常:


DB::transaction(function () {
    if (!DB::table('users')->update(['votes' => 1])) {
        throw new Exception('修改失败', 1);
    }
    
    if (!DB::table('posts')->delete()) {
        throw new Exception('删除失败', 1);
    }
}, 5);//5次失败抛出异常并回滚

手动使用事务

如果你想要手动开启事务从而对回滚和提交有更好的控制,可以使用 DB 门面的 beginTransaction 方法:


DB::beginTransaction();

你可以通过 rollBack 方法回滚事务:


DB::rollBack();

最后,你可以通过 commit 方法提交事务:


DB::commit();

总结

以上就是关于laravel框架支持的数据库系统全部内容,希望这篇Laravel框架学习笔记之数据库事务文章能够帮你解决如相关的PHP问题,更多请关注PHP栏目的其它相关文章!

编程笔记 » Laravel框架学习笔记之数据库事务

赞同 (44) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽