news 2026/4/3 4:17:15

可重复读(Repeatable Read)隔离级别下幻读产生的原因

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
可重复读(Repeatable Read)隔离级别下幻读产生的原因

幻读(Phantom Read)是指在一个事务中,两次相同的范围查询返回了不同数量的行,主要由于其他事务插入新行导致。

产生幻读的核心原因:

1.快照读 vs 当前读的混合使用
-- 可重复读下,普通SELECT是快照读,基于MVCC版本链 SELECT * FROM users WHERE age > 20; -- 快照读,使用事务开始时的快照 -- 但某些操作会触发当前读 UPDATE users SET status = 1 WHERE age > 20; -- 当前读,看到最新提交的数据 SELECT * FROM users WHERE age > 20 FOR UPDATE; -- 当前读,加锁
2.MVCC的局限性
  • MVCC保证已存在的行读取一致性

  • 但无法阻止其他事务插入新的行

  • 事务开始时创建ReadView,只记录当时已存在的行版本

3.锁机制的缺失

在标准SQL规范中,可重复读级别:

  • 只对已存在的行加锁(行锁)

  • 不对不存在的行(间隙)加锁

  • 因此其他事务可以插入满足条件的新行

实际示例:

-- 事务A START TRANSACTION; -- 第一次查询:返回id为1,2,3的3条记录 SELECT * FROM users WHERE id BETWEEN 1 AND 5; -- 此时事务B插入id=4的新记录并提交 INSERT INTO users(id, name) VALUES (4, 'new_user'); COMMIT; -- 事务A再次查询(可重复读应返回相同3条记录) SELECT * FROM users WHERE id BETWEEN 1 AND 5; -- 仍然只看到id 1,2,3 -- 但事务A执行更新操作时 UPDATE users SET status = 1 WHERE id BETWEEN 1 AND 5; -- 更新会作用到id=4的行(因为更新是当前读) -- 然后事务A再次查询,就会看到4条记录 ← 这就是幻读

MySQL InnoDB的特殊处理

MySQL通过Next-Key Locking机制在可重复读级别避免了幻读:

SELECT * FROM users WHERE age > 20 FOR UPDATE; -- InnoDB会锁住age>20的整个范围(间隙锁+行锁) -- 其他事务无法插入age>20的新行

总结表格:

隔离级别脏读不可重复读幻读
读未提交
读已提交
可重复读可能发生
串行化

关键点

  • 幻读专指新插入的行

  • 可重复读能防止已存在行的修改,但不能防止新行的插入

  • 实际应用中可通过SELECT ... FOR UPDATE加间隙锁来避免

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 3:01:09

基于SpringBoot的校园志愿者服务平台设计与实现毕业设计项目源码

题目简介基于 SpringBoot 的校园志愿者服务平台,聚焦校园公益服务 “活动高效组织、志愿时长精准管理、师生便捷参与” 的核心需求,针对传统志愿活动 “报名流程繁琐、时长统计人工化、资源对接低效” 的痛点,构建覆盖学生、志愿组织、学校管…

作者头像 李华
网站建设 2026/3/11 2:47:33

基于JAVA框架的学生宿舍寝室报修管理系统的设计与实现应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着高校规模的扩大和学生人数的增加,宿舍设施的维护与管理成为一项重要任务。传…

作者头像 李华
网站建设 2026/3/30 12:09:43

CTF 学习笔记

文章目录一,CTF(CaptureThe Flag)1 CTF简介2 CTF赛事2.1 国家赛事2.2 国内赛事3 CTF意义4 CTF学习4.1 竞赛模式4.2 题目类型4.3 学习建议二,CTF题目案例三,CTF靶机实战一步步拿下WordPres1 实验环境1.1WordPress简介1.…

作者头像 李华
网站建设 2026/4/3 3:19:58

大数据领域Storm的监控与调优实践

大数据领域Storm的监控与调优实践 关键词:Storm分布式计算、实时流处理、集群监控、性能调优、吞吐量优化、延迟控制、资源管理 摘要:本文深入探讨Apache Storm的监控体系与调优策略,结合底层架构原理与实际工程经验,系统解析监控…

作者头像 李华
网站建设 2026/3/30 16:28:53

Java面试全攻略:从Spring Boot到Kubernetes的实战问答

场景:互联网大厂Java面试 在一个阳光明媚的上午,Java小白程序员“超好吃”来到了互联网大厂的面试现场。面试官是一位有着多年经验的技术专家,他的目光中透露着严肃,但也不失亲切。 第一轮提问:Java基础与Spring框架 面…

作者头像 李华
网站建设 2026/3/31 2:12:25

【毕业设计】基于python机器学习的鲜花识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华