关于 tp5 事务操作总结
前提:
使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。
事务操作
- 依据 tp5.1手册提供的 事务操作介绍,随便写一个例子:
使用场景
Db::startTrans();try{Db::name('users')->insert(array('name'=>'mike','age'=>28));Db::name('products')->where('id','=',1)->update(array('status'=>2)); Db::commit();return json_return("事务操作成功"); // json_return() 为封装返回json数据的方法}catch (\Exception $e){Db::rollback();return json_return($e->getMessage()); // json_return() 为封装返回json数据的方法}
针对事务操作,我们首先需要了解事务的意义:这里不详述了,不清楚的朋友可参考 MySQL事务进行了解。
常见问题
问题1:如上代码中如果第一条新增语句 返回 true , 第二条更新语句返回 false ,那这个事务还是会 commit 的,而不是我们预期的rellback,这是为什么?
如果想让两条 sql 真正按照自己的意愿都 "执行成功(都返回 true 时)" 时再提交事务,那需要这样写:Db::startTrans();try{$res1 = Db::name('users')->insert(array('name'=>'mike','age'=>28));$res2= Db::name('products')->where('id','=',1)->update(array('status'=>2)); }catch (\Exception $e){Db::rollback();} if($re1 && $re2){Db::commit();return json_return("事务操作成功"); // json_return() 为封装返回json数据的方法}else{Db::rollback();return json_return($e->getMessage()); // json_return() 为封装返回json数据的方法}【延伸】 事务回滚的条件指的是 sql 语法报错,而不是增加、删除、更改 sql 时的影响行数为0
问题2: 在事务中,使用了tp5 的函数 $this->success(),即使事务里面的 sql 语句都成功了,但还是走了rollback,为什么?
Db::startTrans();try{Db::name('users')->insert(array('name'=>'mike','age'=>28));Db::name('products')->where('id','=',1)->update(array('status'=>2)); Db::commit();$this->success("事务操作成功"); }catch (\Exception $e){Db::rollback();$this->error($e->getMessage());}是因为$this->success() 这个函数的源码其实也是会抛出异常(这里可查看$this->success() 的方法),解决办法:将catch (\Exception $exception)改成catch (\think\Exception\DbException $exception) // 仅catch sql 异常即可。
关于 tp5 事务操作总结相关推荐
- php中tp5事务,TP5 模型事务操作
注意:数据只要涉及多表一致性操作,必须要开启数据库事务操作 ThinkPHP5 中模型层中使用事务: try{ $this->startTrans(); $this->data($orde ...
- phalapi-进阶篇4(notrom进阶以及事务操作)
2019独角兽企业重金招聘Python工程师标准>>> #phalapi-进阶篇4(notrom进阶以及事务操作)# ##前言## 先在这里感谢phalapi框架创始人@dogsta ...
- 如何处理SQL Server事务复制中的大事务操作
如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对 ...
- python---django中orm的使用(5)数据库的基本操作(性能相关:select_related,和prefetch_related重点)(以及事务操作)...
################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...
- python 事务操作_Python实现完整的事务操作示例
本文实例讲述了Python事务操作实现方法.分享给大家供大家参考,具体如下: #coding=utf-8 import sys import MySQLdb class TransferMoney(o ...
- Winform开发框架里面使用事务操作的原理及介绍
在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLit ...
- day18-事务与连接池 3.jdbc中事务操作介绍
那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...
- python实现redis三种cas事务操作
cas全称是compare and set,是一种典型的事务操作. 简单的说,事务就是为了存取数据库中同一数据时不破坏操作的隔离性和原子性,从而保证数据的一致性. 一般数据库,比如MySql是如何保证 ...
- 事务操作 mysql的事务操作
事务操作 举例: create table my_account( id int unsigned not null primary key auto_increment, account varch ...
- 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理
Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...
最新文章
- 2022-2028年中国加密货币行业市场研究及前瞻分析报告
- CSS捡屎记 // Web开发之精通CSS
- python类实例覆盖_避免类实例覆盖默认值
- ElasticSearch最全详细使用教程:入门、索引管理、映射详解
- windows 端口占用
- c语言半壁江山回调函数,回调函数运行时间太长影响了程序性能,怎么办
- 【数据竞赛】风控实操案例 | 基于Xgboost与Catboost实现非法集资企业识别
- 【UE4】导入FBX格式的模型至UE4
- 赫夫曼树的创建(思路分析)
- html设置背景图片覆盖不重复
- c语言的积木编程,c语言入门第3节,掌握它就能随心所欲的编程了,自己造积木...
- python生成分析图_Pyflame 生成火焰图分析 Python 程序
- Java Nio 之高级搬砖工(FileChannel)二
- 如何取消PDF文档中的高亮显示
- 毕设课设基于Android的校园订餐APP开发(附源码)
- VMware虚拟机各文件后缀名详解
- 显著性检测研究思路和方法
- python批量裁剪并保存图片
- ZBar 二维码扫描,
- 安卓期末大作业——Android日历备忘录
热门文章
- 不确定度计算器_内审员、LIMS系统、外部评审员、不确定度、注册计量师、实验数据分析处理、质量控制和期间核查、方法验证和确认 网络培训汇总...
- 史上最全的vim快捷键
- scala和java数据类型转换
- php生成成语,在线成语词典 洪恩在线成语词典小偷程序php版
- 苹果cmsv10仿片库网PC+WAP美化高端免费自适应模板
- WPF制作简易串口调试助手(上位机部分)
- 阿里巴巴Java开发手册评述
- 科研ABC - 会议海报制作
- 工程伦理网课问答讨论整理
- python基本网络爬虫代码_Python实现网页爬虫基本实现代码解读