thinkphp中的事务操作

1、事务的概念:

事务是由单独单元的一个或多个SQL语句组成,在这个单元中,每个mysql语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中的某条sql语句一旦执行失败或产生错误,整个事务会发生回滚。所有收到影响的数据将返回到事务以前的状态。如果整个单元的所有sql语句均执行成功,则事务顺利执行。

2、事务的四个特性

ACID

原子性:确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

一致性:确保数据库正确地改变状态后,成功提交的事务。

持久性:一旦提交了这个事务之后对数据的修改更新是永久的。

隔离性:使事务操作彼此独立和透明。

3、事务的整个过程

use databases;//开始使用某个数据库

start transaction;//开启事务

insert into stu1 values();//进行相关操作

commit;//提交事务

rollback;//回滚(撤销事务)

4、thinkphp中的事务操作

使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。

使用 transaction 方法操作数据库事务,当发生异常会自动回滚。

ThinkPHP提供了单数据库的事务支持。
启动事务:

$User->startTrans(); 

提交事务:

$User->commit();

事务回滚:

$User->rollback();

事务是针对数据库本身的,所以可以跨模型操作的 。

测试举例:

   public function testTrans(){
        $domain = new Domain();
        $domain->startTrans();//开启事务
        try{
            $hostInfo = Host::get(['host_ip'=>'127.0.0.1']);
            $hostId = $hostInfo->host_id;
            $time = date("Y-m-d H:i:s");
            $domain->data([
                'domain_name'=>'11111','exp_id'=>'4','user_id'=>'2',
                'host_id'=>$hostId,'domain_status'=>1,'course_id'=>'0'
            ]);
            $domain->save();
            $instance = new ImageInstanceModel();
            $instance->data([
                'image_course_id'=>'2222'
            ]);
            $instance->save();
        }catch (\Exception $e){
            $domain->rollback();
        }
        $is = 1;
        if($is == 1){
            $domain->rollback();
        }else{
            $domain->commit();
        }
    }

  

 

转载于:https://www.cnblogs.com/haley0125/p/7551410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值