• tp3.2 事务处理


    事务的机制通常被概括为“ACID”原则即原子性(A)、稳定性(C)、隔离性(I)和持久性(D)。 
      原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。 
      稳定性:数据库在事务执行前后状态都必须是稳定的。 
      隔离性:事务之间不会相互影响。 
      持久性:事务执行成功后必须全部写入磁盘

    场景:需要对多个表同时进行修改操作,用到了事物

    先看代码(controller)

    /**
         * 返利记录
         */
        public function payBack(){
    
            if($_GET['ins']){
                $id = I('id');  //ID
                $uuid = I('uuid');  //UUID
                switch ($_GET['ins'])
                {
                    case 'tongguo':
                        if(!empty($id)&&!empty($uuid)){
                            $result = D('Red')->redPack($id,$uuid,1);   //重点在这里 往⬇️看
                            if($result){
                                $this->success('已通过',__ROOT__);
                            }else{
                                $this->error('通过失败',__ROOT__);
                            }
                        }
                        exit;
                        break;
                    case 'quxiao':
                        if(!empty($id)&&!empty($uuid)){
                            $result = D('Red')->redPack($id,$uuid,-1);
                            if($result){
                                $this->success('取消通过',__ROOT__);
                            }else{
                                $this->error('取消通过失败',__ROOT__);
                            }
                        }
                        exit;
                        break;
                }
            }
    }

    (Model)

    /**
         * 【红包返利】
         * @param string $id
         * @param string $uuid
         * @param string $ispass    1:通过 -1:不通过
         * @return bool
         */
        public function redPack($id='',$uuid='',$ispass=''){
            if(!empty($id)&&!empty($uuid)){
                $data['isCheck'] = $ispass;
                M()->startTrans();  
                $result = $this->where('id='.$id)->save($data);
                $resultBalance = $resultCheck = true;   //余额  返利状态
                if(!empty($result)){
                    //通过   修改余额
                    if($ispass==1){
                        $list = M('redpack as ra ')
                            ->join(' LEFT JOIN t_account as ga on ra.uuid=ga.uuid')
                            ->where(" ra.id=$id and ra.uuid=$uuid ")
                            ->field('ra.redpackmoney,ra.uuid,ga.accountBalance')
                            ->find();
                        if($list['redpackmoney']==0){
                            return true;
                        }else{
                            $balanceData['accountBalance'] = $list['accountbalance']+$list['redpackmoney'];     //修改用户余额
                        }
                        $resultBalance = M('Account')->where("uuid=".$list['uuid'])->save($balanceData);    //用户表 Account
    
                        $checkData['isReceive'] = $ispass;   //修改是否领取
                        $checkData['receiveTime'] = strtotime(date("Y-m-d h:i:s"));   //修改领取时间
                        $resultCheck = $this->where("id=$id and uuid=$uuid" )->save($checkData); //返利表 redPack
                    }else if($ispass==-1){
                        $resultCheck = true;
                    }
                }
    
                if(!empty($result) && !empty($resultBalance) && !empty($resultCheck) ){
                    M()->commit();
                    return true;
                }else{
                    M()->rollback();
                    return false;
                }
            }
        }

       形式:  

    M()->startTrans();
    执行操作1 增删改查
    判断1
      成功:执行2,3......  增删改查
    判断1,2,3
      同时成功(true)
        M()->commit();
      否则
        M()->rollback();
    返回最终结果
    可以自己打印 结果1,2,3 看看什么原因

    多动手,更优秀。
  • 相关阅读:
    【Django】Django 定时任务实现(django-crontab+command)
    【Django】Django web项目部署(Nginx+uwsgi)
    【python】pandas & matplotlib 数据处理 绘制曲面图
    Struts2的简单使用
    Servlet,jsp,JSP技术 ,JSP编程
    Servlet、JSP中页面跳转的方式
    html/京东项目/京东网页高仿/js/jq/css/java web/
    Java ResourceBundle类的使用
    sql语句executeQuery和executeUpdate之间的区别
    jdbc/DAO模式
  • 原文地址:https://www.cnblogs.com/csd97/p/8127200.html
Copyright © 2020-2023  润新知