Innodb锁机制

作者: 琥珀灬 | 来源:发表于2018-05-24 14:51 被阅读0次

InnoDB实现了两种类型的行锁。

共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。

排他锁(X):允许获得排他锁的事务更新数据,但是组织其他事务获得相同数据集的共享锁和排他锁。

可以这么理解:

共享锁就是我读的时候,你可以读,但是不能写。排他锁就是我写的时候,你不能读也不能写。其实就是MyISAM的读锁和写锁,但是针对的对象不同了而已。

除此之外InnoDB还有两个表锁:

意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁

意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

意向锁是InnoDB自动加的,不需要用户干预。

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁:select * from table_name where .....lock in share mode

排他锁:select * from table_name where .....for update

InnoDB有三种行锁的算法:

1,Record Lock:单个行记录上的锁。

2,Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。

3,Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。

InnoDB行锁是通过给索引项加锁实现的,索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引,如果没有索引,InnoDB会通过隐藏的聚簇索引来对记录加锁。也就是说:如果不通过索引条件检索数据,那么InnoDB将对表中所有数据加锁,实际效果跟表锁一样。

InnoDB对于行的查询都是采用了Next-Key Lock的算法,锁定的不是单个值,而是一个范围(GAP)。上面索引值有1,3,5,8,11,其记录的GAP的区间如下:是一个左开右闭的空间(原因是默认主键的有序自增的特性,结合后面的例子说明)

(-∞,1],(1,3],(3,5],(5,8],(8,11],(11,+∞)

默认情况下,InnoDb在可重复读 事务隔离级别下使用此锁,通过 SHOW ENGINE INNODB STATUS 命令可以查看事务处理数据的间隙锁状态。

InnoDB对于行的查询都是采用了Next-Key Lock的算法,锁定的不是单个值,而是一个范围,按照这个方法是会和第一次测试结果一样。但是,当查询的索引含有唯一属性的时候,Next-Key Lock 会进行优化,将其降级为Record Lock,即仅锁住索引本身,不是范围。

Next-Key Lock是行锁与间隙锁的组合,这样,当InnoDB扫描索引记录的时候,会首先对选中的索引记录加上行锁(Record Lock),再对索引记录两边的间隙加上间隙锁(Gap Lock)。如果一个间隙被事务T1加了锁,其它事务是不能在这个间隙插入记录的。

相关文章

  • 九、MySQL锁机制和事务

    InnoDB锁机制   InnoDB存储引擎⽀持⾏级锁,其⼤类可以细分为共享锁和排它锁两类 共享锁(S):允许拥有...

  • Innodb锁机制

    InnoDB实现了两种类型的行锁。 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。 排...

  • InnoDB锁机制

    1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。InnoDB使用的锁类型...

  • InnoDB锁机制

    什么是锁 锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。例如,操作缓冲池中的LR...

  • InnoDB锁机制

    数据事务设计遵循ACID的原则: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isol...

  • InnoDB 锁机制

    InnoDB 锁机制 数据读写可能存在的问题 如果事情能顺顺利利的按照我们预想的那样进行下去,世界将会多么美好。 ...

  • InnoDB的锁机制

    笔记摘自《MYSQL技术内幕(InnoDB存储引擎)》 1 什么是锁 锁是数据库系统区别于文件系统的一个关键特性。...

  • MySql InnoDB 锁机制

    MySQL InnoDB支持三种行锁定方式: l 行锁(Record Lock):锁直接加在索引记录上面,锁住...

  • Mysql InnoDB锁机制

    一、MySQL锁机制概述: (一)什么是锁,以及为什么使用锁和锁的运作? 锁是计算机协调多个进程或纯线程并发访问某...

  • Mysql InnoDB 锁机制

    InnoDB 锁机制 重要概念 当前读:当前读是指执行增删改的读,当前读会对数据加Next Key Lock 快照...

网友评论

    本文标题:Innodb锁机制

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