美团一面:能不能通俗的解释下为什么要有意向锁这个东西?
众所周知,美团面InnoDB 中既有读锁也有写锁,通俗也称为共享锁和排他锁,释下这两种锁既可以加在整张表上,有意也可以加在行上。向锁西
MySQL 自身就提供了表锁的个东能力:
读锁:LOCK TABLE table_name READ 用读锁锁表,会阻塞其他事务的美团面写操作写锁:LOCK TABLE table_name WRITE 用写锁锁表,会阻塞其他事务的通俗读和写操作行锁是 InnoDB 存储引擎提供的,MySQL 本身并不提供行级锁的释下能力:
读锁,如SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 加行级读锁,有意会阻塞其他事务对该行记录的向锁西写操作写锁,如SELECT * FROM table_name WHERE ... FOR UPDATE 加行级写锁,个东会阻塞其他事务对该行记录的美团面的读和写操作又有表锁又有行锁,我们来考虑下这两种类型的通俗锁共存的问题。看下面这个例子:
事务 A 加了行级读锁,释下锁住了表中的一行,让这一行只能读,不能写。
之后,事务 B 尝试申请整个表的写锁。

如果事务 B 申请成功,免费源码下载那么理论上它就能修改表中的任意一行,这与 A 持有的行级读锁是冲突的。
数据库需要避免这种冲突,就势必要让 B 的申请被阻塞,直到 A 释放行级读锁。
那数据库要怎么判断这个冲突呢?
步骤 1:判断表是否已被其他事务用表级锁锁住了整张表步骤 2:判断表中的每一行是否已被行级锁锁住看起来没有什么困难的,但请注意步骤 2,判断表中的每一行,各位,如何判断?
显然,需要遍历!遍历表中的每一行。
小学生都能想到这样的判断方法效率实在太过于低下了。
于是就有了意向锁!
我们先来看下意向锁的解释:
Intention locks are table-level locks that indicate which type of lock (shared or exclusive) a transaction requires later for a row in a table.
意向锁是一个表级锁,其作用就是指明接下来的事务将会用到哪种锁。站群服务器
有两种意向锁:
意向共享锁/读锁(IS Lock):当事务想要获得一张表中某几行的读锁(行级读锁)时,InnoDB 存储引擎会自动地先获取该表的意向读锁(表级锁)意向排他锁/写锁(IX Lock):当事务想要获得一张表中某几行的写锁(行级写锁)时,InnoDB 存储引擎会自动地先获取该表的意向写锁(表级锁)注意这里的自动:申请意向锁的动作是数据库完成的,就是说,事务 A 申请一行的行锁的时候,数据库会自动先开始申请表的意向锁,不需要我们程序员使用代码来申请。
在意向锁存在的情况下,事务 A 如果想申请行级读锁,就必须先申请该表的意向读锁,申请成功后才能继续申请某行记录的行级读锁。
在意向锁存在的情况下,上面的判断可以改成:
步骤 1(不变):判断表是否已被其他事务用表级锁锁住了整张表步骤 2:发现表上有意向读锁(说明表中有些行被行级读锁锁住了),意向读锁和表级写锁互斥,因此,高防服务器事务 B 申请表的写锁会被阻塞。也就是说原先步骤 2 的遍历表中每一行的操作,简化成了判断下整张表上有无表级意向锁就行了,效率大幅提升。

这就是为什么要有意向锁了。
相关文章
- 摘要:在这个充满变化和选择的时代,我们常常会感到迷茫,无法确定自己的方向。而qcyqy5s作为一款备受瞩目的无线耳机,同样也引发了人们的疑惑与困惑。本文将从多个角度探讨qcyqy5s的魅...2025-11-04
 
对于程序员来说,debug的时间往往比写程序的时间还要长。尤其对我这种专写bug为主的程序员来说,正确使用断点调试是提高效率的有效方法。今天我们聊聊如何高效率的断点调试,由于工作中IAR为主力IDE,2025-11-04
作为新一轮科技革命与产业变革浪潮中的代表性技术,虚拟现实不仅能给人们的生产生活方式带来巨大影响,同时还能推动传统产业转型升级以及数字经济加速发展,其产业发展对于各国来说具有重要意义。历经几番沉浮,如今2025-11-04
1. 简介jupyter lab作为jupyter notebook的升级改造版,除了更加人性化的交互界面以及更多的用户自主定制功能之外,最吸引人的就是其丰富多样的拓展插件,使得每个使用jupyter2025-11-04- 摘要:在使用计算机的过程中,我们常常遇到需要同时运行不同操作系统的需求,这时候给计算机装上双系统就成为了一个必要的选择。本文将详细介绍如何给计算机装双系统,帮助读者轻松搭建起一个满足不同...2025-11-04
 
1.imagehover地址:https://github.com/ciar4n/imagehover.cssimagehover.css- 纯CSS3鼠标滑过图片效果动画库,44种鼠标滑过效果2.2025-11-04

最新评论