官网上面的加锁介绍不是很详细,我给详细说一下
首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: $user_mod->lock(true)->where('id=1')->select();这个地方用锁查询,其次地方如果查询这个user对象需要防止同时操作的话也要进行加锁,就是也要用lock(true)这种方式查询:
代码示例如下:
- M()->startTrans();//开启事务
- $map['userid']='test';//查询条件
- $user = M('User')->lock(true)->where($map)->find();//加锁查询
- if($user)
- {
- //执行你想进行的操作, 最后返回操作结果 result
- $result = true;
- if(!$result)
- {
- M()->rollback();//回滚
- $this->error('错误提示');
- }
- }
- M()->commit();//事务提交
- $this->success('成功提示');
复制代码
加上lock(true)的实际就是在查询语句最后加上 for update,可以用如下这种方法测试,开两个窗口,一个窗口开启事务,然后查询加锁一条数据,另一个窗口再次查询加锁这条数据,你会发现另一个窗口的查询会一直等待,直到第一个窗口的事务提交。如图:
相关推荐
主要介绍了PHP封装类似thinkphp连贯操作数据库Db类与简单应用,涉及php基于mysqli的数据库连接、增删改查、异常处理等相关操作技巧,需要的朋友可以参考下
主要介绍了thinkphp连贯操作,以实例形式较为详细的分析了连贯操作的具体用法及常用的方法含义,是非常实用的技巧,需要的朋友可以参考下
可以根据方法名(__FUNCTION__、__METHOD__),或者方法名+用户id等多种自定义键值进行加锁。解锁方式有三种:1.设置锁时间过期自动解锁;2.控制器销毁后自动解;3.手动解锁
用的原声的php编写,操作数据库的时候找了很久没有找到一个合适的链式的Db类,即便有但是没有用到单例模式,老是实例化耗资源,后来便萌生了自己编写一个好用的Db类,于是开始了封装,mysql封装类是根据thinkphp的Db...
ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南
易语言类似thinkphp连贯操作数据库Mysql模块-易语言
自己封装的一个简单的VS2015平台下,C++操作MySQL数据库;可实现连接,增删改查等功能。
ThinkPhp知识大全(非常详细) ThinkPhp知识大全(非常详细)ThinkPhp知识大全(非常详细)ThinkPhp知识大全(非常详细)
关于thinkphp 开发Cms 新闻系统的论文
ThinkPHP2.1.0 RBAC示例操作演示.chm ThinkPHP2.1.0 RBAC示例操作演示.chm ThinkPHP2.1.0 RBAC示例操作演示.chm
thinkphp详细高级教程 think框架 php框架 从设计到seo,从技巧到调试,详细参考资料。
thinkphp电脑操作系统软件下载网站模板
thinkphp5 详细笔记新手打基础 快速入门案例 物美价廉,学习参考!!
ThinkPHP3.1完全开发手册 版权申明 发布本资料须遵守开放出版许可协议 1.0 或者更新版本。 未经版权所有者明确授权,禁止发行本文档及其被实质上修改的版本。 未经版权所有者事先授权,禁止将此作品及其衍生作品以...
ThinkPHP数据库操作CURD-9
增加using/index/fetchSql/strict/token连贯操作方法;模型类的setInc和setDec方法支持延迟写入;[安全方面]I函数增加变量修饰符和正则检测支持;支持全局变量过滤和Action参数绑定的变量过滤;修正可能的SQL注入...
源码介绍 分享一款基于ThinkPHP5.0框架开发的自适应WAP手机端响应式界面博客系统PHP源码 查看更多关于 博客系统PHP源码 的文章 ,前端界面采用BootStrap框架设计,使得博客系统界面能自适应区分PC端和WAP手机端界面...