使用事务之前,先确保数据库的存储引擎支持事务操作。

  • 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模型---事务支持

最新文章

  1. C# winform 安装程序打包(自定义操作)
  2. [I2C]I2C架构分析
  3. 用 python实现简单EXCEL数据统计
  4. CocoaPods Podfile 文件写法有讲究
  5. mysql的text类型长度问题
  6. WCF学习心得--客户端获取服务端自定义类数据
  7. python sqlite3使用
  8. javaweb 登录注册
  9. c语言 列出系统进程
  10. 记录下扣jio的2018年
  11. 如何提高sql查询速度
  12. salt-api配置安装 以及使用
  13. 推荐5款简洁美观的Hexo主题
  14. Docker三剑客之Docker Machine
  15. 解决IE下select option不支持display none样式
  16. SSH整合 第三篇 Spring的加入
  17. 【转】目标检测之YOLO系列详解
  18. [EXCEL] 不能清除剪贴板: We couldn&#39;t free up space on the clipboard. Another program might be using it right now
  19. Beta阶段——3
  20. BZOJ 2179 FFT快速傅立叶 题解

热门文章

  1. sql语句中的insert 和 insert into 的区别?into有什么用?
  2. 关于 [lambda x: x*i for i in range(4)] 理解
  3. Elasticsearch query和filter的区别
  4. C# 类反射创建对象实例
  5. P2805 [NOI2009]植物大战僵尸(最小割+拓扑排序)
  6. [Leetcode] Construct binary tree from preorder and inorder travesal 利用前序和中续遍历构造二叉树
  7. 直通BAT面试算法精讲课2
  8. Linux之根文件系统的构建20160611
  9. linux 下文件重命名/移动/复制命令(转)
  10. FileProvider记录下