thinkphp5使用mysql事务的高级应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: thinkphp5使用mysql事务的高级应用
  1. 事务块中如果包含第三方接口调用,把第三方接口部分放到最后,自己业务的sql放到上面,如果自己的sql失败了,抛出异常,自然也就不会执行到第三方接口部分。也就是说一旦sql出现了异常,就直接到catch里面了,不会继续走到下面的三方接口了。
  2. 事务块中如果调用自己写的函数,比如微信支付退款,能否在函数里面再次使用事务呢?比如函数里面封装退款以及记录退款日志到sql。答案是可以的,退款调用三方接口这种不需要事务,如果成功或者失败,在写一个函数去写日志即可。写日志函数里面用事务,切记不要向外部抛出异常,否则会导致外层的事务捕获到异常回滚。不要让这个退款接口的日志影响的退款状态的业务逻辑。
  3. 事务块中的函数里面的事务必须写commit否则就算其他地方都没有异常最外层也不会提交。函数内部的sql提交回滚不会影响到外层(比如事务块中有两个函数第一个函数里面commit了,第二个函数里面仍然可以rollback,只是这个函数里面回滚),但是外层的sql失败回滚会影响到内层函数的sql回滚(尽管内层已经commit了)。两个函数里面都commit了,最外层最后也要commit才能成功。
  4. 外层try catch能否捕获到函数内部的异常呢?答案是肯定会的。手动的抛出异常是可以捕获到的,sql的异常外面自动捕获。 如果不想让内部的自动抛出异常导致外面捕获,导致sql回滚,可以在函数内部增加try catch 把捕获到的异常在catch内不要向外层抛出即可。
  5. 函数内的commit必须得有要,外层回滚内层的commit不生效(也就是外层rollback了,内层所有函数即使commit了,也无效),函数内层会自动回滚,但是函数内提交要有,要不然外层提交,内层不会自动提交,但是外层没有回滚正常提交了,内层不会自动提交,所以内层必须要有提交。函数内部不写提交,外层提交了,整体也不提交。
  6. 如果函数内没有写回滚,在抛出异常的情况下会导致外层事务回滚(如果没有在catch里面手动抛出异常到外层,外层也会回滚,但是没有异常),函数内有异常写了回滚,没有向外层抛出异常,外层能提交(函数内部的sql会失败)。所以函数内层一定要有回滚机制。
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
128 0
|
1天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
11天前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
17天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(04)事务隔离级别、AICD、CAP、BASE原则一直搞不懂? | 看这篇就够了
本文详细介绍了数据库事务的四大特性(AICD原则),包括原子性、隔离性、一致性和持久性,并深入探讨了事务并发问题与隔离级别。同时,文章还讲解了分布式系统中的CAP理论及其不可能三角关系,以及BASE原则在分布式系统设计中的应用。通过具体案例和图解,帮助读者理解事务处理的核心概念和最佳实践,为应对相关技术面试提供了全面的知识准备。
|
3月前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
134 43
|
2月前
|
关系型数据库 MySQL
mysql事务特性
原子性:一个事务内的操作统一成功或失败 一致性:事务前后的数据总量不变 隔离性:事务与事务之间相互不影响 持久性:事务一旦提交发生的改变不可逆
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
57 2
|
2月前
|
关系型数据库 MySQL 数据库
MySQL事务隔离级别及默认隔离级别的设置
在数据库系统中,事务隔离级别是一个关键的概念,它决定了事务在并发执行时如何相互隔离。MySQL提供了四种事务隔离级别,每种级别都解决了不同的并发问题。本文将详细介绍这些隔离级别以及MySQL的默认隔离级别。
|
3月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
3月前
|
人工智能 分布式计算 数据管理
阿里云位居 IDC MarketScape 中国实时湖仓评估领导者类别
国际数据公司( IDC )首次发布了《IDC MarketScape: 中国实时湖仓市场 2024 年厂商评估》,阿里云在首次报告发布即位居领导者类别。