开启事务/结束事务

    /**
     * 开启事务
     *
     * @param function $callback 可选, 事务之内的业务逻辑, 抛出异常回滚或成功时返回消息
     * @return bool/exception/string 未设置参数时返回true, 出错时返回\Think\Exception异常对象, 成功时返回提示消息
     */
    public static function start($callback = null) {
        D()->startTrans();

        if ($callback && is_callable($callback)) {
            try {
                return $callback();
            } catch (\Think\Exception $e) {
                return $e;
            }
        }

        return true;
    }

    /**
     * 结束事务
     *
     * @param string/object $msg 可选, 成功时为消息, 出错时为异常对象
     * @param boolean $success 可选, 是否提交事务, 默认true, 设置为false则执行回滚
     * @return bool/exception/string 未设置参数时返回true, 出错时返回\Think\Exception异常对象, 成功时返回提示消息
     */
    public static function end($msg = ‘‘, $success = true) {
        // 如果$msg传递为异常类 则抛出错误信息
        if (is_object($msg)) {
            $obj = new \ReflectionClass($msg);

            do {
                if ($obj->name == ‘Exception‘) {
                    $success = false;
                    $msg = $msg->getMessage();
                    break;
                }
            }
            while ($obj = $obj->getParentClass());
        }

        if ($success) {
            D()->commit();
        }
        else {
            D()->rollback();
        }

        $action = $success ? ‘success‘ : ‘error‘;
        return [
            ‘status‘ => $action,
            ‘msg‘ => $msg
        ];
    }

原文地址:https://www.cnblogs.com/ningjiabing/p/10552873.html

时间: 2024-10-10 15:58:56

开启事务/结束事务的相关文章

SQLServer 查询事务 结束事务 杀死事务 强制结束事务

1.查询事务 select request_session_id as spid,OBJECT_NAME(resource_associated_entity_id) as tableNamefrom sys.dm_tran_lockswhere resource_type='OBJECT'2.结束事务 杀死事务 强制结束事务kill 160 --spid由上面查询出来的spid SQLServer 查询事务 结束事务 杀死事务 强制结束事务

关于X锁的问题--由select+X锁是否持有到事务结束的误区

原文:关于X锁的问题--由select+X锁是否持有到事务结束的误区 前言:看了宋桑的文章<一次意外的X锁不阻塞问题>,结合本人的测试,说明一下我对select中使用X锁是否会持有到事务结束产生的误区: 详情不多说了,详见宋桑的<一次意外的X锁不阻塞问题>和<消失的共享锁>,对Select+X锁和Select+S锁的情况进行了解释.以下只描述我的测试:测试表结构及数据如下: 1 /****** Script for SelectTopNRows command from

(转)SpringBoot非官方教程 | 第七篇:springboot开启声明式事务

springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就默认开启.当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器. 准备阶段 以上一篇文章的代码为例子,即springboot整合mybatis,上一篇文章是基于注解来实现mybatis的数据访问层,这篇文章基于xml的来实现,并开启声明式事务. 环境依赖 在pom文件

企业级 SpringBoot 教程 (七)springboot开启声明式事务

springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就默认开启.当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器. 准备阶段 以上一篇文章的代码为例子,即springboot整合mybatis,上一篇文章是基于注解来实现mybatis的数据访问层,这篇文章基于xml的来实现,并开启声明式事务. 环境依赖 在pom文件

Java B2B2C多用户商城 springboot架构 (七)springboot开启声明式事务

springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就默认开启.当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器. 准备阶段 以上一篇文章的代码为例子,即springboot整合mybatis,上一篇文章是基于注解来实现mybatis的数据访问层,这篇文章基于xml的来实现,并开启声明式事务. 环境依赖 在pom文件

MySQL的事务与事务隔离

MySQL中自从引入InnoDB引擎后,在MySQL中就支持事务,事务就是一组原子性的查询语句,也即将多个查询当作一个独立的工作单元,平时通过提交工作单元来完成在事务中的相应的查询或修改,在能支持事务的数据库中必须要满足ACID测试,即事务的四个特性: A:Atomicity,原子性(都执行或者都不执行) C:Consistency,一致性(从一个一致性状态转到另外一个一致性状态) I:Isolaction,隔离性(一个事务的所有修改操作在提交前对其他事务时不可见的) D: Durability

SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍微力度控制不好就超过了我目前知识能力范围,就不是三言两语能够讲清楚的.所以希望大家能够指出其中总结的不足之处,对我

事务及事务隔离级别

什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换为另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation).持久性(durability)的缩写,这四种状态的意思是: 1.原子性 即不可分割,事务要么全部被执行,要么全部不执行.如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生变化:如果

好记性不如烂笔头25-JAVA处理数据库事务(3) - 事务回滚点

在具体的工作中,有的事情需要被保持,不需要回滚,有的工作需要回滚,而这些逻辑,可以通过手动设置事务的回滚点. 1.用JAVA处理数据库事务的事务回滚点的准备 要有一个能够访问数据库的应用.下面的示例都基于ORACLE进行. create table ffm_account( id int primary key , name varchar(32), money int ); 测试数据: insert into ffm_account(id,name,money)values(1,'A',100