美文网首页
MySQL的行锁

MySQL的行锁

作者: 玖柒叁 | 来源:发表于2023-09-09 22:40 被阅读0次

锁的分类

image.png

行锁

记录锁
针对索引记录的锁定,锁加在索引上
间隙锁
索引之间的间隙、第一个索引之前的间隙、最后一个索引之后的间隙加锁
Next-key锁
一条记录的记录锁加上该记录前面的间隙锁

等值查找

对主键的等值查找(for update)

表上的意向排他锁(IX)

记录存在:next-key退化为记录锁(索引记录上的排他锁(X))
记录不存在:next-key退化为间隙锁

对非主键的唯一索引的等值查找(for update)

表上的意向排他锁(IX)
主键索引上的排他锁(X)

记录存在:next-key退化为记录锁(索引记录上的排他锁(X))
记录不存在:next-key退化为间隙锁

普通索引的等值查找(for update)

表上的意向排他锁(IX)
主键索引上的排他锁

记录存在:
该记录的next-key锁
该记录到下一行记录的间隙锁
记录不存在:退化为间隙锁
锁间隙主要是为了避免幻读

无索引的情况下的等值查找(for update)

表上的意向排他锁(IX)
主键索引上的所有记录和间隙加锁,相当于锁表了

范围查找

select * from test where id >= 8 and id < 9 for update
id=8的数据存在,id=9的数据不存在,8下面一行数据id=16

唯一索引的范围查找

1, next-key lock:(4,8]
2, 唯一索引退化:8上的记录锁
3, 范围查找,找到下一行id=16,间隙锁为(8,16]
4, 不满足id<9则退化为间隙锁(8,16)

普通索引的范围查找,不会退化

查看加锁情况

show engine innodb status

推荐一个B站的视频,讲的很好

MySQL行级锁实现

相关文章

  • Innodb的锁

    Innodb的锁是行级锁 mysql delete是否会锁表 MySQL的InnoDB存储引擎支持行级锁,Inno...

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • Mysql的全局锁和表锁

    以前对Mysql的锁的认识,只了解表锁和行锁,其实Mysql的锁的种类还是不少的,有全局锁,表级锁,行级锁,还有元...

  • MySQL 锁之一——行锁

    1、概述 MySQL 锁以粒度划分可以分为三类:全局锁、表级锁和行级锁,MySQL 中的行级锁由存储引擎实现,并不...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • MySQL系统学习(06):MySQL的全局锁、表级锁以及行锁

    原文: MySQL系统学习(06):MySQL的全局锁、表级锁以及行锁[http://www.wangqi94.c...

  • Mysql的行级锁 -- 共享锁和排他锁

    转载 mysql锁机制分为表级锁和行级锁,行级锁中的共享锁(select ... lock in share mo...

  • InnoDB引擎的行锁和表锁

    在Mysql中,Innodb数据引擎支持行锁和表锁,Myisam数据引擎只支持表锁 1 行锁和表锁 行锁是通过索引...

网友评论

      本文标题:MySQL的行锁

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