ThinkPHP5 模型 - 事务支持
使用事务之前,先确保数据库的存储引擎支持事务操作。
- MyISAM:不支持事务,主要用于读数据提高性能
- InnoDB:支持事务、行级锁和并发
- Berkeley DB:支持事务
ThinkPHP5 使用事务有 3 个常用方法:
$model->startTrans(); // 开启事务
$model->rollback(); // 事务回滚
$model->commit(); // 提交事务
小例子:
<?php
/**
* 事务测试
*/
public function transaction()
{
$modelA = model('A');
$modelA->startTrans(); // 开启事务A
$result = $modelA->save($data1);
if($result === false){
$modelA->rollBack(); // 事务A回滚
$this->error('添加A信息失败,请重试');
} $modelB = model('B');
$modelB->startTrans(); // 开启事务B
$result = $modelB->save($data2);
if($result === false){
$modelB->rollBack(); // 事务B回滚
$modelA->rollBack(); // 事务A回滚
$this->error('添加B信息失败,请重试');
} $modelC = model('C');
$modelC->startTrans(); // 开启事务C
$result = $modelC->save($data3);
if($result === false){
$modelC->rollBack(); // 事务C回滚
$modelB->rollBack(); // 事务B回滚
$modelA->rollBack(); // 事务A回滚
$this->error('添加C信息失败,请重试');
} // 提交事务
$modelC->commit();
$modelB->commit();
$modelA->commit(); $this->success('添加成功', url('admin/index/add'));
}
参考链接:tp3模型的事务支持:TP模型---事务支持
ThinkPHP5 模型 - 事务支持的更多相关文章
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
RedisTemplate api详解 1. RedisTemplate的事务 private boolean enableTransactionSupport = false; private bo ...
- springboot开启事务支持时报代理错误
问题:The bean 'xxx' could not be injected as a 'com.github.service.xx' because it is a JDK dynamic pro ...
- spring对事务支持的三种形式
spring对事务支持的三种形式: 1.通过spring配置文件进行切面配置 <bean id="***Manager" class="org.springfram ...
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- mycat的事务支持情况
中秋国庆一共12天,玩的有点嗨,完全没想工作的事情- -.回来赶紧补补.看了一下mycat关于事务的支持情况,做一下记录. 说mycat的事务支持之前,先说说XA协议,即分布式事务.指的是TM(事务管 ...
- SQL引擎及事务支持
查看当前表引擎 SHOW CREATE TABLE table_name MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类 ...
- Spring Redis开启事务支持错误用法导致服务不可用
1.事故背景 在APP访问服务器接口时需要从redis中获取token进行校验,服务器上线后发现一开始可以正常访问,但只要短时间内请求量增长服务则无法响应 2.排查流程 (1)使用top指令查看C ...
- Spring框架事务支持模型的优势
全局事务 全局事务支持对多个事务性资源的操作,通常是关系型数据库和消息队列.应用服务器通过JTA管理全局性事务,API非常烦琐.UserTransaction通常需要从JNDI获取,意味着需要与JND ...
- TP5 模型事务操作
注意:数据只要涉及多表一致性操作,必须要开启数据库事务操作 ThinkPHP5 中模型层中使用事务: try{ $this->startTrans(); $this->data($orde ...
随机推荐
- 【.Net】c# 中config.exe 引发的一些问题
public static void CreateConfig(){ //c#可以添加内置的app.config,我们通过ConfigrationManager类可以 //可以很轻松的操作相关节点,操 ...
- 使用dom4j修改XML格式的字符串
XML格式 <data> <ryzd> <record> <western> <record> <diagnoses> < ...
- 【bzoj1093】[ZJOI2007]最大半连通子图 Tarjan+拓扑排序+dp
题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. ...
- POJ2945:Find the Clones——题解
http://poj.org/problem?id=2945 还是trie树……对于结束标记累加并且开个数组记录一下即可. #include<cstdio> #include<cst ...
- UOJ228:基础数据结构练习题——题解
http://uoj.ac/problem/228 参考:https://www.cnblogs.com/ljh2000-jump/p/6357583.html 考虑当整个区间的最大值开方==最小值开 ...
- BZOJ4503 两个串 【fft】
题目链接 BZOJ4503 题解 水水题. 和残缺的字符串那题几乎是一样的 同样转化为多项式 同样TLE 同样要手写一下复数才A #include<algorithm> #include& ...
- JavaScript去除空格trim()的原生实现
W3C那帮人的脑袋被驴踢了,直到javascript1.8.1才支持trim函数(与trimLeft,trimRight),可惜现在只有firefox3.5支持.由于去除字符串两边的空白实在太常用,各 ...
- 解决 cmd dos 下 无法显示中文
在做程序开发的时候经常需要在使用命令行进行操作, dos环境本身是不支持中文的,有时候中文编码的问题就像苍蝇一样讨厌,下面提供几种常用的手段解决win7环境下中文显示乱码的问题: 方法一: 修改注册表 ...
- [samba]samba设置指定用户权限
步骤: 1.在系统中添加用户 批量添加用户和密码的方法(因为samba用户要求必须在系统中存在): for name in a b c d;do useradd $name ; echo " ...
- 如何在sublime中使用sftp
在开发中我们通常会遇到一个问题——如何通过一款编辑器(或者IDE)便捷的同步线上代码.目前比较热门的编辑器有sublime,atom等,他们都有sftp功能,鉴于本人更喜欢用轻量级的编辑器,那我就在这 ...