• thinkphp事务机制


    thinkphp事务机制

    一、总结

    下面文章也要看,下面有抛出异常(自己提供错误信息那种)

    1、事务机制(原子性):所有的事情都完成了就提交,否则回滚。电商里面用的多,付钱买东西的时候

    2、样例(简单样例)开启事务,提交事务,删除事务,感觉下面的try-catch方式更专业

     // 开启事务

     1 Db::startTrans();
     2 
     3 
     4 
     5 // 删除数据 33
     6 
     7 $a=Db::table("user")->delete(33);
     8 
     9 // 删除数据 34
    10 
    11 $b=Db::table("user")->delete(34);
    12 
    13 
    14 
    15 // 判断条件
    16 
    17 if ($a && $b) {
    18 
    19          // 提交事务
    20 
    21          Db::commit();
    22 
    23 }else{
    24 
    25          // 回滚事务
    26 
    27          Db::rollback();
    28 
    29 }

    二、thinkphp事务机制

     1、事务

                       张三 银行卡 1000, 李四 银行卡 500, 张三给李四转账200

                       1) 银行 先扣除 张三的200

                       2) 银行 将200 给了李四

             2、mysql事务

                       mysql事务 要求 数据库的引擎必须 InnoDB

             3、使用

                       1、自动控制事务

                                Db::transaction(function(){

                                         // 删除一条数据

                                         Db::table("user")->delete(40);

                                         // 删除数据

                                         Db::table("user")->deletes();

                                });

                       2、手动控制事务 (***)

                                // 开启事务

                                Db::startTrans();

                                // 事务

                                try{

                                         // 删除数据id 31

                                         $a=Db::table("user")->delete(31);

                                         // 判断是否删除成功

                                         if (!$a) {

                                                   throw new Exception("删除id 31 数据没有成功");

                                         }

                                         // 删除不存在的数据 id 32

                                         $b=Db::table("user")->delete(32);

                                         // 判断是否删除成功

                                         if (!$b) {

                                                   throw new Exception("删除id 32 数据没有成功");

                                         }

                                         // 执行提交操作

                                         Db::commit();

                                }catch(Exception $e){

                                         // 回滚事务

                                         Db::rollback();

                                         // 获取提示信息

                                         dump($e->getMessage());

                                }

                       // ==================================================================

                                // 开启事务

                                Db::startTrans();

                                // 删除数据 33

                                $a=Db::table("user")->delete(33);

                                // 删除数据 34

                                $b=Db::table("user")->delete(34);

                                // 判断条件

                                if ($a && $b) {

                                         // 提交事务

                                         Db::commit();

                                }else{

                                         // 回滚事务

                                         Db::rollback();

                                }

  • 相关阅读:
    Linux-redis实现session复制
    Linux-sentinel实现redis主从高可用
    Linux-初识redis
    Docker-docker-machine
    Linux-Nginx服务调优(下)
    Linux-Nginx服务调优(上)
    Linux-nginx.conf配置文件模板
    Linux-编译安装Nginx
    VS Code (visual studio code) VSC 编辑器(微软出品,js开发的编辑器)
    好用的在线工具
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9017242.html
Copyright © 2020-2023  润新知