延伸阅读:

三分钟了解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锁》相关推荐

  1. MySQL概要——《深究MySQL》

    1. MySQL架构 MySQL的存储引擎架构将查询处理等系统任务和数据的存或取相分离.这种分离设计使得可根据不同的需求选择不同的存储方式. 存储引擎不会解析SQL,InnoDB例外,它会解析外键定义 ...

  2. 优化MySQL数据类型——《深究MySQL》

    1. 选择数据类型总体原则 1.1 操作整型比字符简单   因为字符的字符集和校对规则(排序规则)使得字符的比较比整型的比较更为复杂.   如我们应该用datetime.date或time存储日期类型 ...

  3. 五分钟了解Mysql的行级锁——《深究Mysql锁》

    延伸阅读: 三分钟了解Mysql的表级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  4. 三分钟了解Mysql的表级锁——《深究Mysql锁》

    延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  5. mysql慢查询 表级锁_三分钟了解Mysql的表级锁——《深究Mysql锁》

    延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  6. 一分钟理清Mysql的锁类型——《深究Mysql锁》

    延伸阅读: 三分钟了解Mysql的表级锁 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 我们常用的存储引擎就MyISAM和InnoDB.MyISAM存储主要就简单的表级别锁,下面只说In ...

  7. mysql锁相关讲解及其应用——《深究mysql锁》

    一.mysql的锁类型 (1) 共享/排它锁(Shared and Exclusive Locks) 共享锁和排他锁是InnoDB引擎实现的标准行级别锁. 拿共享锁是为了让当前事务去读一行数据. 拿排 ...

  8. 数据库设计思想深究----Mysql(图文)

    在探索开始前,我们先试想一个问题:存储为什么要分缓存与磁盘? 一.为什么要区分缓存与磁盘? 我们利用高级语言,编写逻辑,最终被解释为指令集合,委托CPU去处理. 根据计算机组成原理,我们知道CPU在执 ...

  9. 捋一捋什么是MySQL插入意向锁?

    Insert Intention Lock,中文我们也称之为插入意向锁. 这个可以算是对我们之前所讲的 Gap Lock 的一个补充,关于 Gap Lock,如果还有小伙伴不懂,可以参考:聊一聊MyS ...

最新文章

  1. java+循环的时候用标签_java中循环标签的使用
  2. mac设置计算机用户名,如何更改macbook用户名_高手教你更改macbook用户名的方法-系统城...
  3. 2011年给力新作——《数据库系统工程师考试案例梳理、真题透解与强化训练》...
  4. 4.QPixmap,QTransform,绘图函数的使用
  5. 第三次作业-Scrum
  6. 在ODM公司要不要跳槽到创业公司
  7. Java dectobin(n)函数_浙大JAVA实验题答案09answer.docx
  8. windows上java调用gdal.jar报错
  9. ios开发环境搭建教程
  10. 基于MBR 的bootkit的进展 鬼影-TDL4-BMW
  11. python爬虫系列二:爬取糗百成人的妹子图片(requests+正则)
  12. 壮游奇迹哪个服务器稳定,壮游奇迹MU官方选哪个区好呢?
  13. jQuery Ajax 的使用 方法列表 详解教程
  14. 高速PCB基础——电阻,电容,电感(第三讲)
  15. 引擎动力出现问题 Space X第六批星链卫星中止发射
  16. 蓝桥杯 城市建设问题 java实现
  17. vue之packages.json添加注释的正确写法
  18. 基于Java的XXX管理系统的设计与实现——毕业设计题目
  19. RX590GME黑苹果刷RX580 2304SP BIOS
  20. 投影仪应用软件安装电视家纯净版, 幸福指数飙升!

热门文章

  1. 关于报错ImportError: cannot import name ‘AbstractKeyedTuple‘ from ‘sqlalchemy.util._collections‘的解决
  2. 数据结构与算法——二叉树的深度优先遍历
  3. openssl aes加解密的使用
  4. 2022-03-22
  5. 修改PE可选头关闭ASLR
  6. FileInputStream和FileOutputStream实现任何文件类型的拷贝
  7. 内核和用户模式下进程与线程创建
  8. 2020-11-18(如何打开.jar工具)
  9. 判断字符串是否以指定字符开头
  10. POJ 2485 - Highways(求最小生成树的最大权值-Kruskal算法)