栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL InnoDB 行级锁总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL InnoDB 行级锁总结

MySQL InnoDB 支持行级锁,具体可划分为以下几类。

  • Record Lock:记录锁,锁住的是该行记录
  • Gap Lock:间隙锁,锁住的是不包含该记录本身的一个范围
  • Next-key Lock:属于记录锁 + 间隙锁的组合,锁定包括该记录本身的一个范围

普通的 select 查询是不会加行锁的,如果需要,可以采用以下方式。

// 对读取的记录加共享锁
select ... lock in share mode;

// 对读取的记录加独占锁
select ... for update;

Next-key Lock 锁由记录锁和间隙锁组合而成,同时 Next-key Lock 是左开右闭区间,而间隙锁是左开右开区间。

Next-key Lock 在一些场景下会退化成记录锁或间隙锁。

以下总结在 MySQL 8.0 版本下,唯一索引和非唯一索引在不同的 SQL 查询条件的加锁规则。

唯一索引等值查询

  • 当查询的记录是存在的,Next-key Lock 会退化成记录锁
  • 当查询的记录是不存在的,Next-key Lock 会退化成间隙锁

非唯一索引等值查询

  • 当查询的记录存在时,除了会加 Next-key Lock,还会额外加上间隙锁,即会加两把锁
  • 当查询的记录不存在时,只会加 Next-key Lock,然后会退化为间隙锁,即只会加一把锁

非唯一索引和主键索引的范围查询的加锁规则的不同之处

  • 唯一索引在满足一些条件的时候,Next-key Lock 会退化为间隙锁和记录锁
  • 非唯一索引进行范围查询时,Next-key Lock 不会退化为间隙锁和记录锁

参考资料

  • https://xiaolincoding.com/mysql/lock/how_to_lock.html#mysql-%E6%98%AF%E6%80%8E%E4%B9%88%E5%8A%A0%E9%94%81%E7%9A%84
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号