当前位置: 首页 > article >正文

Mysql的行级锁

MySQL 中锁定粒度最小的一种锁,是 针对索引字段加的锁 ,只针对当前操作的行记录进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。行级锁和存储引擎有关,是在存储引擎层面实现的。

InnoDB 的行锁是针对索引字段加的锁,表级锁是针对非索引字段加的锁。当我们执行 UPDATEDELETE 语句时,如果 WHERE条件中字段没有命中唯一索引或者索引失效的话,就会导致扫描全表对表中的所有行记录进行加锁。这个在我们日常工作开发中经常会遇到,一定要多多注意!!!

不过,很多时候即使用了索引也有可能会走全表扫描,这是因为 MySQL 优化器的原因。

 

InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL InnoDB 支持三种行锁定方式:

  • 记录锁(Record Lock):也被称为记录锁,属于单个行记录上的锁。
  • 间隙锁(Gap Lock):锁定一个范围,不包括记录本身。
  • 临键锁(Next-Key Lock):Record Lock+Gap Lock,锁定一个范围,包含记录本身,主要目的是为了解决幻读问题(MySQL 事务部分提到过)。记录锁只能锁住已经存在的记录,为了避免插入新记录,需要依赖间隙锁。

在 InnoDB 默认的隔离级别 REPEATABLE-READ 下,行锁默认使用的是 Next-Key Lock。但是,如果操作的索引是唯一索引或主键,InnoDB 会对 Next-Key Lock 进行优化,将其降级为 Record Lock,即仅锁住索引本身,而不是范围。

MySQL探秘(七):InnoDB行锁算法

 


http://www.kler.cn/a/272176.html

相关文章:

  • 常见Arthas命令与实践
  • 04JavaWeb——Maven-SpringBootWeb入门
  • PHP语言的网络编程
  • 他把智能科技引入现代农业领域
  • Flutter:carousel_slider 横向轮播图、垂直轮播公告栏实现
  • 第23篇 基于ARM A9处理器用汇编语言实现中断<五>
  • 【亲测可行】Mac上clion boost库的安装与使用
  • jwt以及加密完善博客系统
  • ElasticSearch:数据的魔法世界
  • 使用 300 元的显卡推理 Qwen1.5-14B
  • Qt的XML文件读取测试01
  • SQLiteC/C++接口详细介绍之sqlite3类(六)
  • 【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版
  • OpenAI引领下一代AI技术,推出GPT-4 Turbo
  • rust - 一个日志缓存记录的通用实现
  • Transformer的前世今生 day02(神经网络语言模型
  • 【开源鸿蒙】模拟运行OpenHarmony轻量系统QEMU RISC-V版
  • uwsgi+nginx+django 部署学习
  • cache的58问,您能回答上几个
  • 课时67:流程控制_for循环_for基础
  • 万界星空科技商业开源MES,技术支持+项目合作
  • vulhub中GitLab 任意文件读取漏洞复现(CVE-2016-9086)
  • MATLAB中的cell数组和结构体。
  • 安全地使用v-html
  • 深度学习pytorch——基本运算(持续更新)
  • 微信小程序之tabBar