位置: 编程技术 - 正文

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)

  • 三公经费指的是什么
  • 普通发票可以抵税点吗
  • 钢铁租赁公司
  • 三证合一后税务登记证要收回吗
  • 水利基金和印花税会计分录
  • 公对公不开票怎么办
  • 支付宝公户可以转私户吗
  • 跨期差额扣除的计算开票以及账务处理
  • 一般纳税人建筑公司都交什么税
  • 商誉转销会计分录
  • 以前借款没做账现在收回来怎么做账务处理?
  • 长期挂账应付款的审计
  • 小企业作废的发票怎么开
  • 购进的固定资产多少金额可以直接进去费用
  • 房地产开发成本费用明细表
  • 生产用的软件
  • 已认证已抵扣的发票对方要寄回吗
  • 怎么合理规范地避免企业涉税风险?
  • 福利费开专票怎么处理
  • 免征土地增值税的有哪些
  • 旅行社代订住宿发票能报销吗
  • 小规模企业增值税账务处理
  • 软件企业销售服务符合增值税即征即退吗
  • 办理环评费用
  • 纳税人可以是自然人吗
  • 小规模企业国税怎么报税
  • 金融会计风险及防范措施研究目的和意义
  • 进项税额已经认证抵扣了怎么处理
  • win11怎么回到10
  • 预付工程款计入在建工程吗
  • 税金的分录
  • 旅行社代订的住宿费可以抵扣吗
  • php的数组函数
  • 耕地开垦费计入土地成本吗
  • 短期投资计入什么科目
  • 年金单位缴费计入个人账户(税前)
  • 销项税和进项税抵扣的会计分录
  • 建筑行业总分包怎么算
  • phpcms上传视频
  • 其他综合收益在资产负债表中如何填列
  • 做账计提是什么意思
  • phpcms 用的是什么模板引擎
  • SQL Server中TRUNCATE事务回滚操作方法
  • 金蝶软件发票录入什么科目
  • 所得税申报表收入包含营业外收入吗
  • 公司购买法拍房需要交什么费
  • 企业按行业划分可划分为哪些
  • 使用mysql的disctinct group by查询不重复记录
  • 企业进行成本核算时,应根据生产经营特点
  • 委托加工物资科目贷方登记的内容有什么
  • 消防工程改造怎样入账
  • 房地产会计分录怎么做
  • 原材料报废卖掉会计分录
  • 残疾人残保金如何计算
  • 劳务费入什么费用
  • 会计科目其他应付款代码
  • 出口退税进项发票有什么要求
  • 印花税计提依据业务发生时间还是开票时间?
  • 企业利润的构成内容
  • 公司场地租赁交什么税
  • 会计凭证传递的基本要求
  • 工业企业如何建立税务风险预警体系工作表
  • 商业企业可将商品分为哪三类
  • 调整后视镜
  • MS DTC 事务管理器无法启动的解决方案
  • vmwareworkstation10虚拟机
  • 创建软链接 linux
  • setlang.exe - setlang是什么进程 有什么用
  • 苹果发布新机老款能降多少
  • 只需2招 让Win10运行速度更加迅速
  • 我们如何成为专业人员
  • windows更新某些设置由你的组织来管理是什么意思
  • linux系统的安装步骤
  • 用python写网页
  • 列举出python的5个数据类型
  • unityugui
  • 深圳税务网上申报客户端更正申报流程
  • 南通国家税务局
  • 增值税税负偏低的风险点
  • 土地增值税逾期罚款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设