zoukankan      html  css  js  c++  java
  • 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 看看什么原因

    多动手,更优秀。
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/csd97/p/8127200.html
Copyright © 2011-2022 走看看