thinkphp5使用mysql事务的高级应用

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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会失败)。所以函数内层一定要有回滚机制。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
13 2
|
3天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
3天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
12 0
|
10天前
|
SQL 安全 关系型数据库
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
|
13天前
|
存储 关系型数据库 MySQL
Mysql学习--深入探究索引和事务的重点要点与考点
Mysql学习--深入探究索引和事务的重点要点与考点
|
13天前
|
存储 SQL 关系型数据库
Mysql_数据库事务
Mysql_数据库事务
|
13天前
|
运维 监控 关系型数据库
Serverless 应用引擎产品使用之在阿里云函数计算(FC)中,要访问另一个账号的rds配置rds的白名单如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
30 0
|
14天前
|
缓存 关系型数据库 MySQL
【专栏】提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理
【4月更文挑战第27天】本文探讨了提升MySQL性能和高可用性的策略,包括索引优化、查询优化和事务管理。通过合理使用B-Tree和哈希索引,避免过度索引,以及优化查询语句和利用查询缓存,可以改善性能。事务管理中,应减小事务大小并及时提交,以保持系统效率。主从或双主复制可增强高可用性。综合运用这些方法,并根据实际需求调整,是优化MySQL的关键。
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections