首先我们了解一下数据库的锁,数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性,

(注意事项:首先,数据库类型要是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的使用相关推荐

  1. tp6 使用lock_TP5使用Redis处理电商秒杀

    本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...

  2. tp6 使用lock_关于thinkphp连贯操作加锁的详细介绍lock

    我以为可以减少下订单出错的办法 首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: $user_mod->lock(true)->where ...

  3. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-2.启动项目 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和本地环境 技能学习:学习 ...

  4. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  5. c# lock (obj) 与 lock (this) 区别

    lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...

  6. java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  7. Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全

    Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题. 如下Go 语言代码: func TestConcurrent(t ...

  8. apt Could not get lock /var/lib/dpkg/lock 解决方案

    apt Could not get lock /var/lib/dpkg/lock 解决方案 删除锁定文件 sudo rm /var/lib/dpkg/lock

  9. hive lock命令的使用

    1.hive锁表命令 hive> lock table t1 exclusive;锁表后不能对表进行操作 2.hive表解锁: hive> unlock table t1; 3.查看被锁的 ...

最新文章

  1. Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理
  2. python好不好用_但python以前不太好用
  3. QTP简单框架(6)之脚本编写实例
  4. 关于Java成员变量、局部变量、方法,在JVM的内存空间分配
  5. 如何查看正在使用端口号并利用任务管理器将其关闭
  6. 在Python中将列表转换为元组
  7. JAVA入门→下载安装编译执行、变量、数据类型
  8. java中加载窗口的函数_Java函数调用 - playgame的个人页面 - OSCHINA - 中文开源技术交流社区...
  9. C#,提取avi,mpeg,mp4,rmvb,mkv,flv等等视频文件的摘要信息的方法及其源程序
  10. plotly系列 | 绘制散点图组合箱线图(联合图)
  11. matplotlib-19 堆积图
  12. sql语句中case when和as用法
  13. 微信缓存dat怎么转图片_微信dat文件转换为图片
  14. 【芝麻信用对接】欺诈信息验证
  15. Android入门知识全套笔记
  16. getchar,putchar与gets,puts的区别
  17. ubuntu下安装电驴
  18. 理性行为理论和计划行为理论
  19. 软件开发解惑系列之五:内向性格不爱说话的同学,没有合适的工作方法是不行的
  20. PHP之Zip扩展,解压缩文件,ZipArchive类

热门文章

  1. 认识Linux下的硬盘分区
  2. 信息学奥赛一本通 1178:成绩排序 | OpenJudge NOI 1.10 03:成绩排序
  3. 信息学奥赛一本通 2025:【例4.11】体操队
  4. 信息学奥赛一本通(1203:扩号匹配问题)
  5. 信息学奥赛一本通(1086:角谷猜想)
  6. 火星人(洛谷-P1088)
  7. 图论算法 —— 图论概述
  8. 最高分数的学生姓名(信息学奥赛一本通-T1147)
  9. python访问网站添加请求头_Python headers请求头如何实现快速添加
  10. STTN、DSTT、FuseFormer总结(它们改进了什么?)