美文网首页
行锁、间隙锁、临键锁

行锁、间隙锁、临键锁

作者: 小丸子的呆地 | 来源:发表于2021-09-26 09:40 被阅读0次

    行锁、间隙锁、临键锁

    行锁 也叫记录锁 锁定的是某一行一级
    间隙锁 锁定的是记录与记录之间的空隙,间隙锁只阻塞插入操作,解决幻读问题
    临键锁 nextkeylock 是行锁与间隙锁的并集,是mysql加锁的基本单位

    原则1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间。
    原则2:查找过程中访问到的对象才会加锁。
    优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。
    优化2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock 退化为间隙锁。
    一个 bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。 8.0.22之后已修复

    案例:一张表t id(主键)、c(普通索引)、d 字段 插入数据(0,0,0),(5,5,5),(10,10,10),(15,15,15)

    • update t set d=1 where id = 7 主键索引上的 (5,10)间隙锁
    • update t set d=1 where id = 5 主键索引上的 5行锁
    • update t set d=1 where c = 7 普通索引上的 (5,10)间隙锁
    • update t set d=1 where c = 5 普通索引上的 (0,5]临键锁 (5,10)间隙锁
    • update t set d=1 where c <11 普通索引上的 (0,15]临键锁
    • update t set d=1 where c >=10 普通索引上的 (5,10]临键锁 (10,~]的临键锁
    • update t set d=1 where c >=10 and c <11 普通索引上的 (5,15]临键锁
    • update t set d=1 where id >=10 and id <11 主键索引上的 10行锁 (10,15)间隙锁

    相关文章

      网友评论

          本文标题:行锁、间隙锁、临键锁

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