锁与索引和释放锁时机

简介: 【8月更文挑战第1天】

在MySQL的InnoDB引擎里,锁是借助索引来实现的,加锁锁住的其实是索引项,更加具体的说,是锁住了叶子节点

引出的问题:

  1. 一个表有很多索引,锁的是哪个索引呢?
    答案是 查询最终使用的索引
  2. 万一查询没有使用任何索引呢?
    那么就会锁住整个表,此时退化为表锁。
  3. 如果查询条件的值不存在,怎么锁?比如SELECT * FROM your_tab WHERE id = 15 FOR UPDATE

InnoDB引擎会利用最接近15的相邻的两个节点,构造一个临键锁
如果这个时候别的事务想要插入一个id=15的记录,就不会成功

  1. 那么范围查询呢?
    利用索引上的数据,构建一个恰好能够装下这个范围的临键锁,例如 :SELECT * FROM your_tab WHERE id > 33 FOR UPDATE,InnoDB引擎会构造一个(33,supremum]的临键锁,锁住整个范围。supremum是MySQL认为的一个虚拟的最大值

通过上述可以得出一个结论:锁和索引密切相关

学习锁的时候容易有一个误区:认为锁是在语句执行完毕之后就立刻释放掉。
事实上,锁是在整个事务结束之后才释放的。也就是说,当一个事务内部给数据加上锁之后,只有执行Rollback或Commit的时候,锁才被释放掉

目录
相关文章
|
运维 Kubernetes 负载均衡
Kubernetes介绍篇:是什么?为什么要用?
是时候该学习Kubernetes了,不然都不敢说自己了解容器、了解Docker。
1437 0
Kubernetes介绍篇:是什么?为什么要用?
|
Web App开发 存储 算法
微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)
如何优雅地解决“消息序列号只要保证顺序性而不需要兼顾唯一性”的问题呢?这就是本文所要分享的内容,强烈建议深入理解和阅读。
3355 0
|
7月前
|
人工智能 自然语言处理 DataWorks
DataWorks X DeepSeek : 用AI实现数据开发治理!
阿里云DataWorks正式接入DeepSeek-R1系列模型,用户可通过DataWorks Copilot智能助手,以自然语言交互完成代码操作,实现数据开发、分析与治理全流程。DataWorks内置阿里巴巴16年大数据建设方法论,支持多种大数据引擎和AI计算服务,助力“Data+AI”全生命周期管理。开通DataWorks后即可免费体验DataWorks Copilot。
|
7月前
|
存储 分布式计算 大数据
大数据与云计算:无缝结合,开启数据新纪元
大数据与云计算:无缝结合,开启数据新纪元
545 11
|
存储 消息中间件 负载均衡
Zookeeper 简单介绍
Zookeeper 简单介绍
|
XML 前端开发 小程序
用Prompt技巧激发无限创意
本文深入探讨当前最前沿的prompt engineering方案,结合OpenAI、Anthropic和Google等大模型公司的资料,以及开源社区中宝贵的prompt技巧分享,全面解析这一领域的实践策略。
500 13
在Linux中,如何找出占用CPU或内存最多的进程?
在Linux中,如何找出占用CPU或内存最多的进程?
|
SQL 存储 关系型数据库
MySQL主从同步延迟原因与解决方案
MySQL主从同步延迟原因与解决方案
747 0
MySQL主从同步延迟原因与解决方案
|
存储 Java 关系型数据库
【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!
说到 Elasticsearch ,其中最明显的一个特点就是 near real-time 准实时 —— 当文档存储在Elasticsearch中时,将在1秒内以几乎实时的方式对其进行索引和完全搜索。那为什么说 ES 是准实时的呢?
1489 0
|
监控 Dubbo 应用服务中间件
Dubbo如何支持本地调用?injvm方式解析
Dubbo是一个远程调用的框架,对于一个服务提供者,暴露了一个接口供外部消费者调用,那么对于提供者自己是否可以调用这个接口,需要什么特殊处理吗?
5663 0