位置: 编程技术 - 正文

PHP中实现MySQL嵌套事务的两种解决方案(php mysql教程)

编辑:rootadmin

推荐整理分享PHP中实现MySQL嵌套事务的两种解决方案(php mysql教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysqli php,mysqli php,如何用php操作mysql,php+mysql,php的mysql_query,php使用mysql,php中mysqli_query,php+mysql,内容如对您有帮助,希望把文章链接给更多的朋友!

一、问题起源

在MySQL的官方文档中有明确的说明不支持嵌套事务:但是在我们开发一个复杂的系统时难免会无意中在事务中嵌套了事务,比如A函数调用了B函数,A函数使用了事务,并且是在事务中调用了B函数,B函数也有一个事务,这样就出现了事务嵌套。这时候其实A的事务就意义不大了,为什么呢?上面的文档中就有提到,简单的翻译过来就是:所以我们就要在系统架构层面来支持事务的嵌套。所幸的是在一些成熟的ORM框架中都做了对嵌套的支持,比如doctrine或者laravel。接下来我们就一起来看下这两个框架是怎样来实现的。

友情提示,这两个框架的函数和变量的命名都比较的直观,虽然看起来很长,但是都是通过命名就能直接得知这个函数或者变量的意思,所以不要一看到那么一大坨就被吓到了 :)

二、doctrine的解决方案

PHP中实现MySQL嵌套事务的两种解决方案(php mysql教程)

首先来看下在doctrine中创建事务的代码(干掉了不相关的代码):这个函数的第一行用一个_transactionNestingLevel来标识当前嵌套的级别,如果是1,也就是还没有嵌套,那就用默认的方法执行一下START TRANSACTION就ok了,如果大于1,也就是有嵌套的时候,她会帮我们创建一个savepoint,这个savepoint可以理解为一个事务记录点,当需要回滚时可以只回滚到这个点。

然后看下rollBack函数:可以看到处理的方式也很简单,如果level是1,直接rollback,否则就回滚到前面的savepoint。

然后我们继续看下commit函数:算了,不费口舌解释这段了吧 :)

三、laravel的解决方案

laravel的处理方式相对简单粗暴一些,我们先来看下创建事务的操作:感觉如何?so easy吧?先判断当前有几个事务,如果是第一个,ok,事务开始,否则就啥都不做,那么为啥是啥都不做呢?继续往下看rollBack的操作:明白了吧?只有当当前事务只有一个的时候才会真正的rollback,否则只是将计数做减一操作。这也就是为啥刚才说laravel的处理比较简单粗暴一些,在嵌套的内层里面实际上是木有真正的事务的,只有最外层一个整体的事务,虽然简单粗暴,但是也解决了在内层新建一个事务时会造成commit的问题。原理就是这个样子了,为了保持完整起见,把commit的代码也copy过来吧!

MySQL中的if和case语句使用总结 Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:IF表达式IF(expr1,expr2,expr3)如果expr1是TRUE(exprandexpr1NULL)

mysql中You can’t specify target table for update in FROM clause错误解决方法 mysql中Youcan'tspecifytargettableforupdateinFROMclause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。例如下面这个sql:deletefromt

MySQL查询和修改auto_increment的方法 本文实例讲述了MySQL查询和修改auto_increment的方法。分享给大家供大家参考。具体如下:查询表名为tableName的auto_increment值:SELECTAUTO_INCREMENTFROMinformation_sc

标签: php mysql教程

本文链接地址:https://www.jiuchutong.com/biancheng/321379.html 转载请保留说明!

上一篇:Mysql中存储UUID去除横线的方法(mysql存long)

下一篇:MySQL中的if和case语句使用总结(mysql,if)

  • 公司税务注销流程是否要不发生业务多久
  • 资产的计税基础怎么计算
  • 税金及附加包括印花税吗
  • 市政道路工程建筑包括什么
  • 政府会计固定资产盘亏的账务处理
  • 注册资本 投资比例
  • 减少注册资金的理由有哪些
  • 完税证明可以重复打印吗
  • 生产工人工资和福利费是产品成本项目对吗
  • 注册资金证明包含哪些
  • 处置子公司全部股权会计处理 企业会计准则
  • 未到期责任准备金24分法详解
  • 专项资金审计的目的
  • 交易性金融资产的交易费用计入哪里
  • 融资担保公司会计建议有哪些要求
  • 个人所得税允许扣除的费用
  • 公司账户资金
  • 公司买卖股票如何账务处理
  • 财税2009年59号解读
  • 企业所得税递增是什么意思
  • 什么叫变动费用
  • 购进货物赠送客户增值税处理
  • 残保金每年什么时候申报缴纳
  • 投资性房地产的后续计量从成本模式转为公允价值模式的
  • 物流公司油卡怎么抵税的
  • office软件图标不显示
  • 如何解决win7系统搜不到蓝牙耳机
  • 劳务分包费用组成比例
  • 固定资产折旧的影响因素
  • 王者荣耀中马可波罗的一技能和大招
  • video标签自动播放可以带声音吗
  • win11怎么录屏游戏
  • 键盘剪切板怎么打开
  • 如何安装wordpress图文教程
  • 固定资产的折旧怎么算
  • 转入固定资产清理会计科目
  • 绿化管理服务经营范围
  • react reducer详解
  • 收到税务局退款怎么做分录
  • bootstrapicon
  • 税控盘总是连接服务器失败
  • Mysql半同步复制原理及问题排查
  • phpcms二次开发教程
  • c语言缺省值
  • 设备安装收入税率
  • 年终奖每个月发
  • 清算机构收单机构和发卡行
  • mysql左连接和右连接语法
  • mysql数据库编码
  • 小企业会计准则2023电子版
  • 调账的基本方法及要点都有哪些?
  • 税务师报名条件和要求
  • 购进生产免税货物用材料可以抵扣进项税额吗
  • 发票丢失记账联入账
  • 客房服务费可以开发票吗
  • 一次性付款的优势
  • sql语句 时间
  • mysql分页性能
  • centos7如何添加永久静态路由
  • 如何使用easybcd
  • win10怎么禁止用户安装程序
  • 超小平板电脑
  • os x10.11el capitan beta3下载地址
  • win7开机黑屏只有鼠标安全模式也不行
  • WIN XP下VMware Tools(虚拟机)安装的详细方法(图文教程)
  • linux php教程
  • win10错误提示
  • Win10 Mobile Redstone新功能介绍
  • python三角形角度
  • perl的$_
  • 捉虫趣事作文200字
  • JavaScript的setter与getter方法
  • Node.js中的什么模块是用于处理文件和目录的
  • python 开源框架
  • shell删除一个文件
  • javascript 分号
  • 前端jsonp解决跨域
  • 全国税务查询
  • 重庆国税官网网址
  • 赞颂税务工作者绝句
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设