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

脏读、幻读、可重复读

脏读

  • 定义:一个事务读取了另一个事务尚未提交的数据 。比如事务 A 修改了某条数据但还没提交,此时事务 B 读取了这条被修改但未提交的数据。若事务 A 后续回滚,事务 B 读到的数据就是无效的,相当于读到了 “脏数据”。
  • 危害:可能基于错误或不存在的数据做决策,破坏数据一致性 。比如银行转账,转账事务未提交时,查询事务若读取到未确定的转账结果,会造成账户金额显示混乱。
  • 解决方法:提高事务隔离级别,使用 “读已提交” 及以上隔离级别 。比如在 MySQL 中,可将事务隔离级别设置为 “读已提交”(Read Committed),确保事务只能读取已提交的数据。

幻读

  • 定义:在一个事务内,相同的查询多次执行,结果集数量却不同(主要因其他事务新增或删除数据导致) 。比如事务 A 查询满足条件的一批数据,事务 B 在期间插入满足条件的新数据并提交,事务 A 再次查询时就会多读到新插入的数据,仿佛出现 “幻觉”。
  • 危害:破坏事务一致性,影响基于查询结果的业务逻辑 。比如统计库存商品数量时,幻读会使统计结果不准确,影响后续采购、销售等决策。
  • 解决方法:使用更严格的隔离级别,如 “可串行化”(Serializable) ,或者利用行级锁、多版本并发控制(MVCC)等机制。在 InnoDB 引擎的可重复读隔离级别下,通过 MVCC 技术在一定程度上解决幻读问题。

可重复读

  • 定义:一个事务多次读取同一数据时,在事务执行期间,其他事务不能对该数据进行修改(包括读写操作),保证同一事务内多次读取结果一致 。比如事务 A 多次读取某条订单数据,在事务 A 结束前,其他事务无法修改这条订单数据。
  • 作用:防止脏读、不可重复读 ,保证事务内数据的一致性和稳定性,让事务在读取数据时不受其他事务干扰。
  • 实现原理:以 MySQL 的 InnoDB 引擎为例,通过 MVCC 技术实现,在事务开始时创建一致性读视图(快照),后续读操作基于该快照获取数据 。
http://www.xdnf.cn/news/2568.html

相关文章:

  • 如何查看 MySQL 的 innodb_lock_wait_timeout 值
  • Java EE 计算机的操作系统
  • 【Java面试笔记:进阶】24.有哪些方法可以在运行时动态生成一个Java类?
  • JAVA:红黑树应用的技术指南
  • DDR的那些事,lesson1
  • Redis一些小记录
  • Java——琐碎知识点一
  • Suna开源框架分析
  • C++:迭代器失效问题
  • 手搓传染病模型(SEIA-拓展)
  • Segment Anything in Images and Videos
  • angular跨组件通讯
  • 【误差理论与可靠性工程】蒙特卡洛法计算电路可靠度和三极管静态工作点电压
  • 从数据孤岛到智能决策:健康管理系统如何打通企业健康大数据?
  • 使用DeepSeek进行PPT制作
  • ARCGIS PRO 在地图中飞行
  • node20的安装和vue的入门准备
  • Python3(12) 条件控制
  • AI发展史
  • java(三) -------------运算符、字符串、输入输出、大数值和数组
  • CoOAG:首个捕捉学术研究兴趣动态演变的数据集
  • SQL命令
  • 高频关键字、函数、容器、智能指针和算法例子
  • 深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析
  • EdgeOne 防盗刷实践教程
  • 19.TVS特性与使用注意事项
  • JAVA中的贪婪爬取和非贪婪爬取
  • C++:STL——list
  • PG-EXPLAIN基础
  • 稳扎稳打,25西电生命科学技术学院(考研录取情况)