zoukankan      html  css  js  c++  java
  • 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秒之间,由此测试成功,效果如下:

     数据库:

    _______________

  • 相关阅读:
    【转】 上海交大ACM队长建议
    好资源
    待做
    分治思想
    周末看的东西
    [UVa11988] Broken Keyboard (a.k.a. Beiju Text)
    UVa 题目分类
    [UVa11729] Commando War
    [LA3135] Arugus
    [UVa11995] I Can Guess the Data Structure!
  • 原文地址:https://www.cnblogs.com/cuizhenyu/p/14669464.html
Copyright © 2011-2022 走看看