• TP5 事务处理加锁


    首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: db('sms')->lock(true)->where(['id'=>1])->select();这个地方用锁查询,其它地方如果查询这个db('sms')对象需要防止同时操作的话也要进行加锁,就是也要用lock(true)这种方式查询:
    <?php
    
    namespace app	estcontroller;
    
    use thinkController;
    
    use thinkDb;
    
    class Index extends Controller
    {
        
        public function index()
        {
            $time = date('H:i:s');
            
            // 开启事务
            Db::startTrans();
            
            db('sms')->lock(true)->select();//加锁
            
            $update1 = db('sms')->where(['id' => 1])->update(['email' => 1]);
            
            $update2 = db('sms')->where(['id' => 2])->update(['email' => 2]);
            
            $update3 = db('sms')->where(['id' => 3])->update(['email' => 8]);
            
            if($update1 && $update2 && $update3){
                sleep(5);
                Db::commit();//提交
                return $time.'_lock_true_'.date('H:i:s').'---'.$update1.'---'.$update2.'---'.$update3;
            }else{
                Db::rollback();//回滚
                return $time.'_lock_false_'.date('H:i:s').'---'.$update1.'---'.$update2.'---'.$update3;
            }
            
        }
        
        
    
    
    }
    View Code

    打开两个网页同时刷新,下边实际刷新时间应该是在09:33:23到24秒之间,由此测试成功,效果如下:

     数据库:

    _______________

  • 相关阅读:
    os模块
    函数练习
    集合 去重
    作业二:购物车程序
    作业一: 三级菜单
    字典练习
    字典
    切片
    冒泡练习
    判断整型数据奇偶数
  • 原文地址:https://www.cnblogs.com/cuizhenyu/p/14669464.html
Copyright © 2020-2023  润新知