美文网首页
Innodb引擎

Innodb引擎

作者: 哓晓的故事 | 来源:发表于2019-03-22 00:31 被阅读0次

间隙锁(Next-key Lock)

Oracle 锁定数据是通过需要锁定的某行记录所在的物理block上的事务槽表级锁定信息
MySQL 在指向数据记录的第一个索引键之前最后一个索引键之后的空域空间上标记锁定信息(致命缺点是,不存在的键值也会被无辜的锁定, 而造成在锁定的时候无法插入锁定键值范围内的任何数据) - 为了解决幻读

读锁:也叫共享锁(S锁),若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
写锁:又称排他锁(X锁)。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
意向锁(Innodb为了兼容表级锁)
InnoDB有一个这样的规定:在加行级锁之前自动会加意向锁
意向共享锁(IS Lock):事务“想要”读取某几行数据。
意向排他锁(IX Lock):事务“想要”写某几行数据。
加S Lock时,会先加IS Lock。加X Lock时,会先加IX Lock
考虑场景:我们使用LOCK TABLE语句希望对表A加读锁,这时我们应该先要判断是否有其他事务对表A进行写
没有意向锁:做法是遍历表A的所有行级锁,看是否有X锁。
有意向锁:做法判断一下表A是否有IX就可以了。就可以判断表A此时有没有在写的事务

行锁

操作对象是数据表中的一行
通过索引来实现行锁,存在的问题

  1. query 没有命中索引,会走表锁
  2. query 索引只是命中部分数据,但是还会锁定一片范围,由于间隙索引范围索引导致
  3. 以b为索引条件对b做修改,会走表锁
  4. 索引范围内不存在的键,被 Next-key Lock 范围锁定,导致无法插入新值
  5. 相同索引条件,不同数据变更也会行锁

死锁

相关文章

  • mysql(七)

    MySQL存储引擎-innodb 查看存储引擎 innodb和myisam的物理区别 innodb 核心特性 MV...

  • mysql学习

    常用的引擎 常用的引擎主要有两个:Innodb和MyIASM Innodb引擎,Innodb提供了对数据库ACID...

  • MySQL-InnoDB体系架构

    作者:刘仁鹏参考资料:《MySQL技术内幕 InnoDB存储引擎》 1.InnoDB体系架构 InnoDB存储引擎...

  • MySQL-存储引擎

    零、本文纲要 一、MySQL存储引擎 二、InnoDB存储引擎1、InnoDB逻辑存储结构2、InnoDB架构3、...

  • Mysql索引优化

    存储引擎 InnoDB InnoDB是是Mysql默认的事务性存储引擎 InnoDB才有MVCC来支持高并发,并且...

  • MySQL技术内幕InnoDB存储引擎阅读相关笔记-锁

    一、InnoDB锁 对于MyISAM引擎来说,其锁是表锁。InnoDB引擎提供行锁。 1、InnoDB行锁 1)、...

  • 「Mysql索引原理(一)」1.存储引擎简介

    存储引擎 0. 前言1. 存储引擎查看2. InnoDB存储引擎特性存储InnoDB历史3. MyISAM存储引擎...

  • 第 2 章 InnoDB 存储引擎

    2.1 InnoDB 概述 2.2 InnoDB 存储引擎的版本 2.3 InnoDB 体系架构 InnoDB 存...

  • 淘宝MySQL文档整理

    MySQL · 引擎特性 · InnoDB 事务锁系统简介 MySQL · 引擎特性 · Innodb 锁子系统浅...

  • Mysql中autocommit参数详解

    运行环境: Mysql: 5.7.31 背景知识: Mysql默认引擎是InnoDB,InnoDB引擎是支持事务的...

网友评论

      本文标题:Innodb引擎

      本文链接:https://www.haomeiwen.com/subject/dtdkvqtx.html