`
cuiyadll
  • 浏览: 203963 次
文章分类
社区版块
存档分类
最新评论

关于thinkphp连贯操作加锁的详细介绍lock

阅读更多

官网上面的加锁介绍不是很详细,我给详细说一下
首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: $user_mod->lock(true)->where('id=1')->select();这个地方用锁查询,其次地方如果查询这个user对象需要防止同时操作的话也要进行加锁,就是也要用lock(true)这种方式查询:
代码示例如下:

  1.         M()->startTrans();//开启事务
  2.         $map['userid']='test';//查询条件
  3.         $user = M('User')->lock(true)->where($map)->find();//加锁查询
  4.         if($user)
  5.         {
  6.             //执行你想进行的操作, 最后返回操作结果 result
  7.             $result = true;
  8.             if(!$result)
  9.             {
  10.                 M()->rollback();//回滚
  11.                 $this->error('错误提示');
  12.             }
  13.         }
  14.         M()->commit();//事务提交
  15.         $this->success('成功提示');
复制代码
 

加上lock(true)的实际就是在查询语句最后加上 for update,可以用如下这种方法测试,开两个窗口,一个窗口开启事务,然后查询加锁一条数据,另一个窗口再次查询加锁这条数据,你会发现另一个窗口的查询会一直等待,直到第一个窗口的事务提交。如图:

分享到:
评论

相关推荐

    PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例

    本文主要介绍了如何使用PHP封装一个类来实现类似thinkphp框架中的连贯操作数据库的功能。这种封装方式允许我们以面向对象的方式来操作数据库,通过一系列的方法链式调用执行数据库查询,从而简化了代码,提高了代码...

    thinkphp连贯操作实例分析

    接下来,我们将详细阐述ThinkPHP中连贯操作的具体知识点,包含常用方法及其含义,以及一些附加功能。 ### 一、常用连贯操作方法 1. **where**: 该方法用于设置查询条件。例如,`$m->where('id', 10)` 会查询id等于...

    封装类似thinkphp连贯操作数据库的Db类,单例模式,完全遵守tp写法的三方类,使用超级简单!

    用的原声的php编写,操作数据库的时候找了很久没有找到一个合适的链式的Db类,即便有但是没有用到单例模式,老是实例化耗资源,后来便萌生了自己编写一个好用的Db类,于是开始了封装,mysql封装类是根据thinkphp的Db...

    ThinkPHP数据操作指南

    ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南

    易语言类似thinkphp连贯操作数据库Mysql模块-易语言

    在易语言中,为了方便开发者处理数据库操作,常常会通过模块化的方式提供特定功能,例如“易语言类似thinkphp连贯操作数据库Mysql模块”就是这样一个工具。 该模块的目的是模仿ThinkPHP框架中的数据库操作方式,...

    PHP+MySQL高并发加锁事务处理问题解决方法

    4. 调整应用程序逻辑,确保在并发环境中正确处理加锁和解锁操作。 掌握这些技巧,有助于在PHP应用中构建稳定、可靠的高并发事务处理机制,确保数据的正确性和唯一性。对于想要进一步学习的读者,可以参考相关的...

    ThinkPHP控制器详细介绍.pdf

    ThinkPHP控制器详细介绍

    thinkPHP框架乐观锁和悲观锁实例分析

    最后,对于ThinkPHP框架有兴趣的读者,可以进一步查阅相关专题和教程,例如《ThinkPHP入门教程》、《ThinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶...

    php-redis锁-多种加锁解锁

    - **键值的自定义**:描述中提到可以根据方法名(`__FUNCTION__`、`__METHOD__`)或方法名+用户ID来创建唯一的键值,这样做是为了确保每个锁对应一个特定的资源或操作。`__FUNCTION__`返回当前函数名,`__METHOD__`...

    ThinkPHP数据操作方法总结

    在本篇知识总结中,我们将详细探讨ThinkPHP框架中数据操作的核心方法,包括添加数据、更新数据、查询数据和删除数据。 ### 添加数据 在ThinkPHP中添加数据通常会使用模型的add()方法,这是一个非常便捷且强大的方式...

    thinkphp详细高级教程

    《ThinkPHP详细高级教程》是一份全面且深入的教育资源,专为那些希望精通ThinkPHP框架的开发者准备。ThinkPHP作为一款流行的PHP框架,以其简洁、高效和强大的功能深受开发者的喜爱。本教程旨在帮助读者从设计到SEO,...

    ThinkPHP异常操作类

    1. **数据库连接**:ThinkPHP提供了`Db`类用于数据库操作,支持多种数据库类型如MySQL、SQLite等。`Db::connect()`用于建立数据库连接,`Db::table()`用于指定操作的数据表。 2. **异常处理与事务**:在执行数据库...

    ThinkPHP5快速入门手册

    ThinkPHP5快速入门手册详细介绍了PHP开发框架ThinkPHP的最新版本5.0的特点和使用方法。ThinkPHP是一个轻量级、快速、简单的PHP开发框架,基于MVC设计模式和面向对象的编程思想,是PHP开发中非常流行的框架之一。 ...

    thinkphp_thinkphp_thinkphp5_

    此外,ThinkPHP5的数据库操作也相当便捷。它内置了ActiveRecord模式,通过ORM(对象关系映射)将数据库操作转化为面向对象的代码,简化了SQL编写。例如,模型(Model)类提供了`save()`、`find()`、`select()`等方法...

    ThinkPHP_v5.0.7.zip_ThinkPHP V5.0.7_thinkphp

    《深入理解ThinkPHP V5.0.7框架》 ThinkPHP,作为一个广受开发者欢迎的开源PHP框架,其V5.0.7版本是其发展过程中一个重要里程碑。这个版本不仅继承了ThinkPHP一贯的轻量级和面向对象设计原则,还引入了诸多新特性和...

    ThinkPHP6.0完全开发手册.pdf

    本手册针对 ThinkPHP 6.0.* 版本,详细介绍了 ThinkPHP 的开发规范、目录结构、配置架构、请求流程、控制器、模型、视图、路由、事件、缓存、Session、 Cookie、上传、命令行启动、内置服务器、查看版本、自动生成...

Global site tag (gtag.js) - Google Analytics