位置: 编程技术 - 正文

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)

  • 个体户能开增值税普通发票给单位吗?
  • 个人所得税预扣率10%
  • 国际重复征税的前提条件是
  • 税率的具体形式
  • 贸易公司开发票进项跟销项不符合怎么办
  • 工程施工企业收入和成本需不需要设置按项目核算
  • 小规模企业跨月专票如何冲红
  • 多缴纳个人所得税怎么办
  • 资产负债表的日期可以是1月1日吗
  • 注销公司需要提供股东身份证吗
  • 未达账项怎么做会计分录
  • 购买的风机如何做分录
  • 合同没签定金可以退的吗
  • 补计提去年的折旧该怎么做账
  • 结算本月应付职工薪酬,其中生产工人工资为18000
  • 补提以前年度个税会计分录
  • 软件企业增值税退税的账务处理
  • 个体工商户个人经营所得税优惠政策
  • 保安公司开具的发票
  • 为什么查询发票显示查无此票
  • 知识产权投资入股要交税吗
  • 二手车没购车发票有影响吗
  • 4s店额外收取服务费
  • 个人贷款走公司账户流程
  • 汇率调整怎么做分录
  • 浏览器播放视频加速怎么设置
  • 一般纳税人资质证明文件去哪打印
  • 电子税务局变更办税人员怎么操作
  • Linux dpkg-query 命令用法详解(Debian Linux中软件包的查询工具)
  • 电商平台第三方服务
  • 春天里的____作文
  • 入库的原材料属于什么科目
  • 境外向国内汇款新规
  • php简单加密
  • 科罗拉多河上的月光简谱
  • bom也称为
  • 伪类的常见类型
  • 残保金计提比例
  • 企业提取盈余公积的比例
  • 购买需要安装的设备计入什么科目
  • python 函数的返回值
  • SqlServer2012中First_Value函数简单分析
  • 盈余公积包括哪两个明细科目
  • 食堂维修费用计入什么科目
  • 怎么才能获得音乐
  • 劳务公司可以用工资表做成本
  • 采购暂估业务处理流程
  • 销售费用现金支出预算
  • 提的税与实际交的税区别
  • 应付账款收不回发票该如何调整
  • 出差补助办法
  • 资产负债表金额的来源一般是
  • 怎么做个体户
  • 股票增发给谁
  • T-SQL中使用正则表达式函数
  • centos下安装jdk
  • QQPCTray.exe是什么进程 QQPCTray.exe文件介绍
  • Windows移动中心里没有无线网络
  • centos创建lv
  • Winaw32.exe - Winaw32是什么进程
  • linux网络不可用
  • win7暗藏的超实用快捷键汇总
  • 7款应用最广泛的游戏
  • 微软十周年
  • win7怎么修改开始菜单样式
  • win7系统显卡驱动怎么安装
  • 小马kms激活工具
  • win10专业版怎么改用户名
  • opengl立体模型
  • python怎么图像处理
  • django中的setting.py的作用
  • android 基础
  • python中执行同一函数3次
  • jquery图表
  • Android 使用log4j2
  • 福建省国税局
  • 秀屿区国税局服务电话
  • 三国杀马钧获取
  • 省纪检委派驻机构值得去么
  • ca认证登录不了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设