欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 数据库事务与锁的知识点

数据库事务与锁的知识点

2025/9/20 20:02:16 来源:https://blog.csdn.net/lotluck/article/details/146986383  浏览:    关键词:数据库事务与锁的知识点

分享数据库事务的四个隔离级别(读未提交、读已提交、可重复读、串行化)的实现本质是通过锁机制(读锁、写锁、间隙锁)和 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 和间隙锁的协同,在保证数据一致性的同时兼顾性能

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词