Thinkphp3.2 事务 mysql 事务 redis 事务


事务是针对数据库本身的操作

Thinkphp3.2 事务分为两中情况:

=========

应用逻辑
    启动事务:
        $user->startTrans();
    提交事务:
        $user->commit();
    事务回滚:
        $user->rollback();

1.对象类型

        // 在User模型中启动事务
        $User->startTrans()
        // 进行相关的业务逻辑操作
        $Info = M("Info"); // 实例化Info对象
        $Info->save($User); // 保存用户信息
        if (操作成功)$User->commit();
            else$User->rollback()

2.过程类型

    M()->startTrans();//开启事务 
    if(){
        M()->commit();//执行
    }else{
        M()->rollback();//事务回滚
    }

mysql 事务:

菜鸟mysql 事务讲解: http://www.runoob.com/mysql/mysql-transaction.html

#1.mysqli
    $dbhost = 'localhost:3306';  // mysql服务器主机地址
    $dbuser = 'root';            // mysql用户名
    $dbpass = '123456';          // mysql用户名密码
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    mysqli_query($conn, "set names utf8");
    mysqli_select_db( $conn, 'RUNOOB' );
    mysqli_query($conn, "SET AUTOCOMMIT=0");
    //设置为不自动提交,因为MYSQL默认立即执行

    mysqli_begin_stransaction($con);
    执行sql 语句
    mysqli_commit($con);
    mysqli_close($con);

#2.PDO
    $dp = 'mysql:host=127.0.0,1;dbname=test';
    try{
        $this->_pdo = new PDO($dp,'root','123');
    }catch(PDOException $e){
        echo '数据链接失败'.$e->getMessage();
        exit;
    }
    开启事务
    ty{
        $_pdo->beginTransaction();
        $sql_forlock = 'select * from goods where id = '.$gid .' limit 1 for update';//数据库锁表 innodb
        $result		= $pdo->query($sql_forlock,PDO::FETCH_ASSOC);
        $goodsInfo	= $result->fetch();
        如果没有成功
        $_pdo->rollback();
        如果成功
        $_pdo->commit();
    }catch(PDOException $e){
        echo $e->getMessage();
        $pdo->rollBack();
    }

redis 事务

    单个redis命令的执行是原子性的,但redis 没有在事务上增加任何维持原子性的机制,
    所以redis事务的执行并不是原子性的,redis事务可以理解为一个打包的批量执行脚本,
    中间某条命令的失败会导致前面已做指令的回滚,也不可造成后续的指令不做。

    multi //开启事务
    set name spicy
    set js  gs
    exec     //执行
    discard  //放弃执行事务

猜你喜欢

转载自blog.csdn.net/qq_39414590/article/details/81624599