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

数据库事务与锁的知识点

分享数据库事务的四个隔离级别(读未提交、读已提交、可重复读、串行化)的实现本质是通过锁机制(读锁、写锁、间隙锁)和 MVCC(多版本并发控制)的协同控制,具体对比如下:

在这里插入图片描述

一、读未提交(Read Uncommitted)

  • 实现本质:无锁机制 + 无 MVCC
    事务直接读取内存中的最新数据,不加任何锁,也不生成版本快照。
    问题:可能读取到其他事务未提交的脏数据(脏读)。

二、读已提交(Read Committed)

  • 实现本质:行级写锁 + MVCC 快照读
    1. 写操作:对修改的数据加排他锁(X 锁),防止其他事务同时修改。
    2. 读操作:每次查询生成新的 ReadView(快照),通过 MVCC 读取已提交的数据版本。
      特点:避免脏读,但同一事务内多次读取可能因数据更新产生不可重复读。

三、可重复读(Repeatable Read)

  • 实现本质:行级锁 + 间隙锁 + MVCC 快照读
    1. 写操作:加排他锁(X 锁),锁定当前行。
    2. 读操作:基于事务初始生成的 ReadView 快照,通过 MVCC 避免脏读和不可重复读。
    3. 间隙锁(Gap Lock):锁定索引范围(如 (id=5, id=10)),防止其他事务插入新数据导致幻读。
      特点:MySQL 默认隔离级别,解决脏读、不可重复读,但需结合间隙锁才能完全避免幻读。

四、串行化(Serializable)

  • 实现本质:表级锁 + 强制串行执行
    1. 读操作:对查询范围加共享锁(S 锁),阻止其他事务写入。
    2. 写操作:对数据加排他锁(X 锁),并阻塞其他所有操作。
      特点:完全避免并发问题,但性能极低,仅用于强一致性要求的场景。

锁与 MVCC 的协同关系

隔离级别锁机制MVCC 作用并发性能
读未提交无锁最高
读已提交行级写锁 + MVCC 快照避免脏读较高
可重复读行级锁 + 间隙锁 + MVCC避免脏读、不可重复读、幻读中等
串行化表级锁强制串行执行最低

关键总结

  1. 读未提交:无锁,性能最高但数据一致性最差。
  2. 读已提交:通过 MVCC 快照实现非锁定读,避免脏读。
  3. 可重复读:结合行锁、间隙锁和 MVCC,解决大部分并发问题。
  4. 串行化:完全串行化执行,牺牲性能换取最高一致性。
    实际应用中,可重复读(RR) 是 MySQL 默认选择,通过 MVCC 和间隙锁的协同,在保证数据一致性的同时兼顾性能

相关文章:

  • Axure RP9.0教程: 查询条件隐藏与显示(综合了动态面板状态切换及展开收缩效果实现)
  • 管家婆财贸ERP BB100.采购单返写估价入库单价
  • On Superresolution Effects in Maximum Likelihood Adaptive Antenna Arrays论文阅读
  • PyTorch深度学习框架 的基础知识
  • Java高频面试题2:集合框架
  • Vue3 Pinia Store 新建store示例、使用store示例
  • 配置文件 ini
  • 一周学会Pandas2 Python数据处理与分析-编写Pandas2 HelloWord项目
  • 人脸识别和定位别的签到系统
  • python发送qq邮件
  • 开源模型应用落地-Qwen2.5-Omni-7B模型-部署 “光速” 指南
  • 记一个使用BigDecimal所有类型变为整数的问题
  • Qt基础:资源文件
  • AI提示词:邮件优化大师
  • 原码,补码,反码
  • 解决STM32CubeMX中文注释乱码
  • Springboot学习笔记4.1
  • GRPO训练下的参考模型选择
  • 响应式网站模板 html网站模板 开源网站模板下载
  • 前端算法实战:大小堆原理与应用详解(React中优先队列实现|求前K个最大数/高频元素)