首页 > 编程语言 >thinkphp 锁表 lock

thinkphp 锁表 lock

时间:2024-03-18 09:45:39浏览次数:32  
标签:function 行级 事务 16 锁表 lock thinkphp id

示例一

//同时进行调用 bb会等待aa执行完毕之后 
public function aa(){
		Db::transaction(function () {
			$a = OrdersModel::where(['id'=>16])->lock(true)->find()->toArray();
			//等待10秒  
			sleep(10);
			dump($a);
		});
	}
	public function bb(){
		Db::transaction(function () {
			$a = OrdersModel::where(['id'=>16])->lock(true)->find()->toArray();
			dump($a);
		});
	}

示例二

//同时进行调用 aa等待10秒完成 bb立即执行完毕
public function aa(){
		Db::transaction(function () {
			$a = OrdersModel::where(['id'=>16])->lock(true)->find()->toArray();
			//等待10秒
			sleep(10);
			dump($a);
		});
	}
	public function bb(){
		Db::transaction(function () {
			$a = OrdersModel::where(['id'=>17])->lock(true)->find()->toArray();
			dump($a);
		});
	}

行级锁是自动释放的,一旦事务完成或提交,行级锁会自动释放。具体的释放时机取决于数据库管理系统的实现方式。

通常情况下,当事务完成时,不论是通过提交(commit)还是回滚(rollback),行级锁都会被释放。提交事务会将对数据库的更改永久保存,同时释放所有相关的锁。而回滚事务会撤销对数据库的更改,同时也会释放相关的锁。

需要注意的是,在某些情况下,行级锁可能会在事务结束之前持续存在,例如在某些数据库系统中,锁可能会在事务结束时或在整个事务中的某个特定点被释放。

总之,当您的事务完成时,行级锁将会自动释放,确保其他事务可以访问和修改相应的行。

提问:查询id16行锁 id17会锁吗

行级锁的粒度是针对单行数据的,因此在一般情况下,查询id为16的行并对其加行级锁不会影响id为17的行。
行级锁是针对被访问的行进行加锁,而不是整个表或其他行。在并发环境下,行级锁可以控制对数据行的并发访问和修改。
所以,如果你在查询id为16的行时使用了行级锁,它只会在查询期间对id为16的行加锁,而不会影响id为17的行或其他行。其他事务仍然可以访问和修改id为17的行,除非它们也使用了行级锁并且存在冲突。

标签:function,行级,事务,16,锁表,lock,thinkphp,id
From: https://www.cnblogs.com/douyuanjun/p/18079681

相关文章

  • 【HTB】Sherlocks Recollection 蓝队 easy
    工具:volatility2.6(2比3完善) https://www.volatilityfoundation.org/25kali下载volatility2.6#下载pip2sudowgethttps://bootstrap.pypa.io/pip/2.7/get-pip.pysudopython2get-pip.py#pycrypto、distorm3所需依赖sudopython2-mpipinstall-Usetuptoolswh......
  • STM32第九节(中级篇):RCC(第二节)——讲解系统时钟配置函数SetSysClockTo72
    目录前言STM32第九节(中级篇):RCC(第二节)——讲解系统时钟配置函数SetSysClockTo72代码内容位置及检索分析代码 代码展示时钟控制使能闪存控制寄存器配置AHP,APB1,APB2的总线时钟配置锁相环时钟 超频操作小结前言    上节课我们讲了理论部分,那么我们这节课......
  • 【HTB】Sherlocks Ore 蓝队 medium
    task1问题:哪个CVE导致了EC2的最初泄露?#文件放在~/htb/Ore目录cdusr/share/grafanals-lacatVERSION #8.2.0搜索grafana8.2.0exploit可得CVE-2021-43798答案:CVE-2021-43798task2问题:请详细说明针对我们组织的威胁行为者(TA)使用的所有恶意IP地址......
  • D. Blocking Elements
    原题链接题解最大值最小化,想到了二分而对于一个二分到的\(\mathscr{maxlen}\)而言,如何判断是否存在一种分法使得最大值不大于它?对于一个给定的二分值而言,要想成功有两个约束条件,一个是间断值不超过\(\mathscr{maxlen}\),一个是选中值之和不超过\(\mathscr{maxlen}\)由此......
  • VMware ESXi 8.0U1d macOS Unlocker & OEM BIOS 标准版和厂商定制版
    VMwareESXi8.0U1dmacOSUnlocker&OEMBIOS标准版和厂商定制版ESXi8.0U1标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)OEM定制版请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1......
  • VMware ESXi 8.0U1d macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动
    VMwareESXi8.0U1dmacOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)发布ESXi8.0U1集成驱动版,在个人电脑上运行企业级工作负载请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org发......
  • thinkphp 5 跨域问题解决
    版本:5.1.41LTS从网上搜到好多从/public/index.php添加heade信息,或者用中间件,或者添加behavior操作,可以做到解决跨域问题,但是亲身试验了都不行,今天刚找了一个,可以使用,放在这里header('Access-Control-Allow-Credentials:true');header('Access-Control-Allow-Methods:GET,......
  • mysql for update是锁表还是锁行
    https://www.cnblogs.com/waldron/p/18068079 在并发一致性控制场景中,我们常常用forupdate悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如forupdate进行了锁表导致其他请求只能等待,从而拖垮系统,因此了解它的原理是非常必要的,下面我们通过一系......
  • ReentrantLock 使用
    ReentrantLock介绍ReentrantLock是Java中的一个可重入锁,它提供了与synchronized关键字类似的功能,但相比synchronized,ReentrantLock提供了更多的灵活性和功能。定义:ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与......
  • 【PR】Block-NeRF: Scalable Large Scene Neural View Synthesis
    【简介】 本文的作者来自UCBerkeley,Waymo和Google研究院,一听就是大佬。发表在CVPR2022。  【创新点】  【review】  【方法】   【结论】  【参考】TancikM,CasserV,YanX,etal.Block-nerf:Scalablelargesceneneuralviewsynth......