zoukankan      html  css  js  c++  java
  • mysql Innodb 三种行锁(记录锁、间隙锁与临键锁)

    Record Lock:记录锁,单个行记录上的锁。
    Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。
    Next-Key Lock:临键锁,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,可以解决幻读的问题。


    什么是幻读?


    事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交,然后待事务A再次进行查询时发现数据与第一次不匹配。Serializable隔离级别也可以解决幻读问题,虽然实现简单,数据更加安全,但是并发能力非常差,不推荐。突然又想到事务隔离级别,下次再说。

    记录锁:
    记录锁就是为某行记录加锁,列必须为唯一索引列或主键列,否则加的锁就会变成临键锁,
    查询语句必须为精准匹配 = ,不能为 >、<、like等,否则也会退化成临键锁。

    间隙锁:
    间隙锁基于非唯一索引,它锁定一段范围内的索引记录。比如查询字段区间为1-5,即1-5内的记录行都会被锁住,2、3、4 的数据行的会被阻塞,但是 1 和 5 两条记录行并不会被锁住。

    临键锁:
    临键锁可以理解为一种特殊的间隙锁,上面说过了通过临建锁可以解决幻读的问题。 每个数据行上的非唯一索引列上都会存在一把临键锁,当某个事务持有该数据行的临键锁时,会锁住一段左开右闭区间的数据。

    假设某表age字段下有:5,10,15,20

    该表中 age列潜在的临键锁有:
    (-∞, 5],
    (5, 10],
    (10, 15],
    (15, 20],
    (20, +∞],

    在事务 A 中修改年龄为5的记录。之后如果在事务 B 中执行插入年龄为8的数据,便会被阻塞。

  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/zyh-s/p/13253670.html
Copyright © 2011-2022 走看看