tp6 使用lock_tp5 lock的使用
首先我们了解一下数据库的锁,数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性,
(注意事项:首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用)。
在tp5中如何使用:请看以下代码
public function testTrans(){
$time = date('H:i:s');
$model = new \app\model\Student();
$model->startTrans();//开启事务
try{
$student = $model->lock(true)->where('id', 4)->find();//加锁
$student->update(['age' => $student['age']+10], ['id' => 4]);
sleep(20);
$model->commit();//事务提交
return $time.'_lock_true_'.date('H:i:s');
} catch (\Exception $e) {
$model->rollback();
throw $e;
}
return $time.'_lock_false_'.date('H:i:s');
}
InnoDB 预设是Row-Level Lock (行级锁),FOR UPDATE 需要指定明确的主键才会行级锁,否则为表级锁,如:
select from user where id = 1 (行级锁)
select from user where id > 1 (表级锁)
操作完成后无需手动解锁,会自动解锁
tp6 使用lock_tp5 lock的使用相关推荐
- tp6 使用lock_TP5使用Redis处理电商秒杀
本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...
- tp6 使用lock_关于thinkphp连贯操作加锁的详细介绍lock
我以为可以减少下订单出错的办法 首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: $user_mod->lock(true)->where ...
- 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习:学习 ...
- 【java线程】锁机制:synchronized、Lock、Condition
[Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...
- c# lock (obj) 与 lock (this) 区别
lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...
- java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题. 如下Go 语言代码: func TestConcurrent(t ...
- apt Could not get lock /var/lib/dpkg/lock 解决方案
apt Could not get lock /var/lib/dpkg/lock 解决方案 删除锁定文件 sudo rm /var/lib/dpkg/lock
- hive lock命令的使用
1.hive锁表命令 hive> lock table t1 exclusive;锁表后不能对表进行操作 2.hive表解锁: hive> unlock table t1; 3.查看被锁的 ...
最新文章
- Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理
- python好不好用_但python以前不太好用
- QTP简单框架(6)之脚本编写实例
- 关于Java成员变量、局部变量、方法,在JVM的内存空间分配
- 如何查看正在使用端口号并利用任务管理器将其关闭
- 在Python中将列表转换为元组
- JAVA入门→下载安装编译执行、变量、数据类型
- java中加载窗口的函数_Java函数调用 - playgame的个人页面 - OSCHINA - 中文开源技术交流社区...
- C#,提取avi,mpeg,mp4,rmvb,mkv,flv等等视频文件的摘要信息的方法及其源程序
- plotly系列 | 绘制散点图组合箱线图(联合图)
- matplotlib-19 堆积图
- sql语句中case when和as用法
- 微信缓存dat怎么转图片_微信dat文件转换为图片
- 【芝麻信用对接】欺诈信息验证
- Android入门知识全套笔记
- getchar,putchar与gets,puts的区别
- ubuntu下安装电驴
- 理性行为理论和计划行为理论
- 软件开发解惑系列之五:内向性格不爱说话的同学,没有合适的工作方法是不行的
- PHP之Zip扩展,解压缩文件,ZipArchive类