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();
        }
    }

  

 

posted @ 2017-09-19 13:39  兔子兔子0125  阅读(940)  评论(0编辑  收藏  举报