一分钟深入Mysql的意向锁——《深究Mysql锁》
延伸阅读:
三分钟了解Mysql的表级锁
五分钟了解Mysql的行级锁
mysql锁相关讲解及其应用——《深究mysql锁》了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没有MVCC的知识,理解起来会总觉得不明朗。本来我的这个只是个记录,并不是专门的讲给别人看的,后发现有不少人看,我还是专门加上这篇文章的链接。
在《五分钟了解Mysql的行级锁》中说到,InnoDB为了让表锁和行锁共存而使用了意向锁。但是并没有细说为什么如果没有意 向锁的话,表锁和行锁不能共存。 现在就来细说一下。
为什么没有意向锁的话,表锁和行锁不能共存?
举个粟子(此时假设行锁和表锁能共存): 事务A锁住表中的一行(写锁)。事务B锁住整个表(写锁)。
但你就会发现一个很明显的问题,事务A既然锁住了某一行,其他事务就不可能修改这一行。这与”事务B锁住整个表就能修改表中的任意一行“形成了冲突。所以,没有意向锁的时候,行锁与表锁共存就会存在问题!
意向锁是如何让表锁和行锁共存的?
有了意向锁之后,前面例子中的事务A在申请行锁(写锁)之前,数据库会自动先给事务A申请表的意向排他锁。当事务B去申请表的写锁时就会失败,因为表上有意向排他锁之后事务B申请表的写锁时会被阻塞。
所以,意向锁的作用就是:
当一个事务在需要获取资源的锁定时,如果该资源已经被排他锁占用,则数据库会自动给该事务申请一个该表的意向锁。如果自己需要一个共享锁定,就申请一个意向共享锁。如果需要的是某行(或者某些行)的排他锁定,则申请一个意向排他锁。
说明:意向锁之间都是兼容的,之前是我看错了,Im so sorry参考:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-intention-locks
意向锁是表锁还是行锁?
首先可以肯定的是,意向锁是表级别锁。意向锁是表锁是有原因的。
当我们需要给一个加表锁的时候,我们需要根据意向锁去判断表中有没有数据行被锁定,以确定是否能加成功。如果意向锁是行锁,那么我们就得遍历表中所有数据行来判断。如果意向锁是表锁,则我们直接判断一次就知道表中是否有数据行被锁定了。
一分钟深入Mysql的意向锁——《深究Mysql锁》相关推荐
- MySQL概要——《深究MySQL》
1. MySQL架构 MySQL的存储引擎架构将查询处理等系统任务和数据的存或取相分离.这种分离设计使得可根据不同的需求选择不同的存储方式. 存储引擎不会解析SQL,InnoDB例外,它会解析外键定义 ...
- 优化MySQL数据类型——《深究MySQL》
1. 选择数据类型总体原则 1.1 操作整型比字符简单 因为字符的字符集和校对规则(排序规则)使得字符的比较比整型的比较更为复杂. 如我们应该用datetime.date或time存储日期类型 ...
- 五分钟了解Mysql的行级锁——《深究Mysql锁》
延伸阅读: 三分钟了解Mysql的表级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...
- 三分钟了解Mysql的表级锁——《深究Mysql锁》
延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...
- mysql慢查询 表级锁_三分钟了解Mysql的表级锁——《深究Mysql锁》
延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...
- 一分钟理清Mysql的锁类型——《深究Mysql锁》
延伸阅读: 三分钟了解Mysql的表级锁 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 我们常用的存储引擎就MyISAM和InnoDB.MyISAM存储主要就简单的表级别锁,下面只说In ...
- mysql锁相关讲解及其应用——《深究mysql锁》
一.mysql的锁类型 (1) 共享/排它锁(Shared and Exclusive Locks) 共享锁和排他锁是InnoDB引擎实现的标准行级别锁. 拿共享锁是为了让当前事务去读一行数据. 拿排 ...
- 数据库设计思想深究----Mysql(图文)
在探索开始前,我们先试想一个问题:存储为什么要分缓存与磁盘? 一.为什么要区分缓存与磁盘? 我们利用高级语言,编写逻辑,最终被解释为指令集合,委托CPU去处理. 根据计算机组成原理,我们知道CPU在执 ...
- 捋一捋什么是MySQL插入意向锁?
Insert Intention Lock,中文我们也称之为插入意向锁. 这个可以算是对我们之前所讲的 Gap Lock 的一个补充,关于 Gap Lock,如果还有小伙伴不懂,可以参考:聊一聊MyS ...
最新文章
- java+循环的时候用标签_java中循环标签的使用
- mac设置计算机用户名,如何更改macbook用户名_高手教你更改macbook用户名的方法-系统城...
- 2011年给力新作——《数据库系统工程师考试案例梳理、真题透解与强化训练》...
- 4.QPixmap,QTransform,绘图函数的使用
- 第三次作业-Scrum
- 在ODM公司要不要跳槽到创业公司
- Java dectobin(n)函数_浙大JAVA实验题答案09answer.docx
- windows上java调用gdal.jar报错
- ios开发环境搭建教程
- 基于MBR 的bootkit的进展 鬼影-TDL4-BMW
- python爬虫系列二:爬取糗百成人的妹子图片(requests+正则)
- 壮游奇迹哪个服务器稳定,壮游奇迹MU官方选哪个区好呢?
- jQuery Ajax 的使用 方法列表 详解教程
- 高速PCB基础——电阻,电容,电感(第三讲)
- 引擎动力出现问题 Space X第六批星链卫星中止发射
- 蓝桥杯 城市建设问题 java实现
- vue之packages.json添加注释的正确写法
- 基于Java的XXX管理系统的设计与实现——毕业设计题目
- RX590GME黑苹果刷RX580 2304SP BIOS
- 投影仪应用软件安装电视家纯净版, 幸福指数飙升!
热门文章
- 关于报错ImportError: cannot import name ‘AbstractKeyedTuple‘ from ‘sqlalchemy.util._collections‘的解决
- 数据结构与算法——二叉树的深度优先遍历
- openssl aes加解密的使用
- 2022-03-22
- 修改PE可选头关闭ASLR
- FileInputStream和FileOutputStream实现任何文件类型的拷贝
- 内核和用户模式下进程与线程创建
- 2020-11-18(如何打开.jar工具)
- 判断字符串是否以指定字符开头
- POJ 2485 - Highways(求最小生成树的最大权值-Kruskal算法)