我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql_行锁、临键锁、间隙锁的理解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql_行锁、临键锁、间隙锁的理解

目录

行锁

行锁,也称为记录锁。
当我们针对主键或者唯一索引加锁的时候,Mysql默认会对查询的这一行数据加行锁,避免其他事务对这一行数据进行修改。
在这里插入图片描述

间隙锁

间隙锁,顾名思义,就是锁定一个索引区间。

在普通索引或者唯一索引列上,由于索引是基于B+树的结构存储,所以默认会存在一个索引区间。而间隙锁,就是某个事物对索引列加锁的时候,默认锁定对应索引的左右开区间范围。
在这里插入图片描述
在基于索引列的范围查询,无论是否是唯一索引,都会自动触发间隙锁。
比如基于between的范围查询,就会产生一个左右开区间的间隙锁。
在这里插入图片描述

临键锁

相当于行锁+间隙锁的组合,也就是它的锁定范围既包含了索引记录,也包含了索引区间它会锁定一个左开右闭区间的数据范围。
在这里插入图片描述
假设我们使用非唯一索引列进行查询的时候,默认会加一个临键锁,锁定一个左开右闭区间的范围。
在这里插入图片描述

总结

行锁、临键锁、间隙锁只是表示锁定数据的范围,最终目的是为了解决幻读的问题。
而临键锁相当于行锁+间隙锁,因此当我们使用非唯一索引进行精准匹配的时候,会默认加临键锁,因为它需要锁定匹配的这一行数据,还需要锁定这一行数据对应的左开右闭区间。
因此在实际应用中,尽可能使用唯一索引或者主键索引进行查询,避免大面积的锁定造成性能影响。

唯一索引等值查询:
1.当查询的记录是存在的,next-key lock 会退化成「记录锁」。
2.当查询的记录是不存在的,next-key lock 会退化成「间隙锁」。

非唯一索引等值查询:
1.当查询的记录存在时,除了会加 next-key lock 外,还额外加间隙锁,也就是会加两把锁。
2.当查询的记录不存在时,只会加 next-key lock,然后会退化为间隙锁,也就是只会加一把锁。

非唯一索引和主键索引的范围查询的加锁规则不同之处在于:
唯一索引在满足一些条件的时候,next-key lock 退化为间隙锁和记录锁。
非唯一索引范围查询,next-key lock 不会退化为间隙锁和记录锁。

来源地址:https://blog.csdn.net/qq_46548855/article/details/130682578

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql_行锁、临键锁、间隙锁的理解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL的锁机制——记录锁、间隙锁、临键锁

记录锁(Record Locks) 记录锁锁住的是索引记录,记录锁也叫行锁。如果使用索引作为条件命中了记录,那么就是记录锁,被锁住的记录不能被别的事务插入相同的索引键值,修改和删除。 例如: select * from test_table
2023-08-18

MySQL间隙锁和临键锁的区别有哪些

MySQL中的间隙锁(Gap Lock)和临键锁(Next-Key Lock)是用于并发控制的锁机制,用于处理多个事务同时操作同一数据范围的情况。它们的区别如下:锁的范围:间隙锁是在索引范围之间的间隙上进行锁定,而临键锁是在索引记录上进行锁
2023-10-21

深入理解MySQL的行级锁

目录☃️概述☃️行级锁介绍☃️行锁❄️❄️介绍❄️❄️演示☃️间隙锁&临键锁☃️概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。
深入理解MySQL的行级锁
2024-09-10

深入理解MySQL中的行级锁

行级锁是MySQL中的一种并发控制机制,允许在同一时刻只允许一个事务访问数据库中的某一行记录,通过对特定行而非整个表进行锁定,可以提高并发性和性能。MySQL中有两种主要的行级锁类型:共享锁和排他锁。MySQL使用MVCC机制实现行级锁,并提供不同的隔离级别来指定行级锁的行为。使用注意事项包括死锁、锁升级、隔离级别影响和索引使用。最佳实践包括细粒度锁、适当的隔离级别、索引优化和监测锁争用。
深入理解MySQL中的行级锁
2024-04-02

Java关键字synchronized原理与锁的状态详解

在Java当中synchronized关键字通常是用来标记一个方法或者代码块。本文将通过示例为大家详细介绍一下Synchronized的各种使用方法,需要的可以参考一下
2022-11-13

解锁数据库连接池管理的奥秘:提升应用性能的关键

数据库连接池管理是提升应用性能的关键,本文将带你深入理解数据库连接池的概念、原理和最佳实践,助你轻松解决数据库连接问题,优化应用性能。
解锁数据库连接池管理的奥秘:提升应用性能的关键
2024-02-13

怎样巧用ip代理解决python爬虫运行被封锁被限制的难题

这篇文章将为大家详细讲解有关怎样巧用ip代理解决爬虫运行被封锁被限制的难题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如何解决采集数据IP被封锁限制的难题?以破解天眼查网络爬虫为例  小编
2023-06-02

探索 Swoole 扩展的多进程和多线程并发编程,解锁并行处理的奥秘

探索 Swoole 扩展的多进程和多线程并行编程,掌握高并发应用开发技巧
探索 Swoole 扩展的多进程和多线程并发编程,解锁并行处理的奥秘
2024-02-05
SQLServer 错误 1203 进程 ID %d 尝试对不归它所有的资源进行解锁: %.*ls。 请重试该事务,因为此错误可能是计时条件导致的。 如果该问题仍然存在,请与数据库管理员联系。 故障
2023-11-05

编程热搜

目录