不可重复读的危害

不可,重复,危害 · 浏览次数 : 155

小编点评

**隔离级别** 可重复读问题是指在一个事务中,多个事务并发修改同一个数据时,导致结果不可靠的问题。不可重复读的危害是,多个事务对同一数据进行读取时,获取的值可能不同,导致业务逻辑错误。 **库存例子** 库存是数据关联性数据库中经常被使用的数据,而事务A根据库存量需要调配其他物流资源。然而,由于数据关联性数据库中的库存量可能被多个事务并发修改,事务A在执行过程中,一直动态改变的库存量可能导致其以“历史库存值”计算的资源物流配置是错误的。 **MVCC** MVCC是一种隔离级别,它可以有效地防止不可重复读问题。MVCC创建一个快照,用来记录那一瞬间的库存量。当事务开始执行时,MVCC将把库存量缓存到快照中。之后,其他事务只能读取从快照中获取的库存量。 **串行化** 串行化是一种方法,可以使多个事务并发执行,但确保每个事务都得到完全的隔离。在串行化的过程中,每个事务都将从自己的本地缓存中获取数据,并确保在执行操作之前将其写入数据库。

正文

隔离级别

关于这个可重复读的隔离级别。

不可重复读的危害,书上说的事两次读取的值不一样,至于不一样的后果,从网上找的解释并不特别全面清晰。

举一个库存的例子。

事务A 根据库存量需要调配其他物流资源,一切资源配置都依据库存数值。

事务B 、事务C等等,可能是有人买东西,总之这些事务BCD等等都在修改库存量,并且进行了提交。

破坏隔离性

问题在于事务A在执行过程中,一直动态改变的库存量,可能导致其以“历史库存值”计算的资源物流配置都是错误的。

也就是说事务BCD等,对事务A造成了极大的困扰,这很不符合事务的“隔离性”!

数据关联性

数据库中对于库存量并不是一个简单的值,与库存相关的还有订单表,货物表,流水表等,一个库存值的修改,同时会影响其他表。因此我们或许不用把目光聚集在同一事务差两次库存量,数值不一样这个事情。当事务A开头查询了库存量为100时,我们希望接下来在操作订单表,货物表,流水表时,其数据应该语库存量100对应起来。而不是查询出来库存量为100,由于数据被其他事务的更改,导致我接下来操作的是“现在”库存量为135的订单表。

因此这也就引出了MVCC。它形成了一个快照,用来记录那一瞬间的库存量为100的库存表、订单表、货物表、流水表。

实时性

虽然有了快照,但是我们对于事务A,计算的仍然是历史数据。那么如果我们从历史数据计算出来的业务是可用的,那么就能够接收一定延迟。

如何保证绝对的实时呢?那就串行化么,他数据都静态不变了,那自然就“实时”了。

解决了不可重复读的问题,从而保证在这一个快照中,我们的数据是相互协调一致的,从而保证我们的业务的逻辑的正确性。

以上仅为猜测推理,谨慎辨别。

与不可重复读的危害相似的内容:

不可重复读的危害

隔离级别 关于这个可重复读的隔离级别。 不可重复读的危害,书上说的事两次读取的值不一样,至于不一样的后果,从网上找的解释并不特别全面清晰。 举一个库存的例子。 事务A 根据库存量需要调配其他物流资源,一切资源配置都依据库存数值。 事务B 、事务C等等,可能是有人买东西,总之这些事务BCD等等都在修改

MySQL面试题——隔离级别相关面试题

隔离级别相关面试题 MySQL事务隔离级别 未提交读——可以读到其他事务未提交的数据(最新的版本) 错误现象:脏读、不可重复读、幻读的现象 提交读(RC)——可以读到其他事务已提交的数据(最新已提交的版本) 错误现象:不可重复读、幻读现象 使用场景:希望看到最新的有效值 可重复读(RR)——在事务范

【后端面经-数据库】MySQL的事务隔离级别简介

对于数据库常用的事务隔离级别进行解释和区分,并解释三类读取错误——脏读、不可重复读、幻读的区别。

[转帖]事务隔离级别

https://www.jianshu.com/p/51035d3f6953 本文主要为了总结事务隔离级别的整体知识,包含模拟脏读、不可重复读和幻读的场景 1. 什么是事务隔离级别? 什么是事务? 要了解什么是事务隔离级别,需要先了解什么事务,可参考 百度百科-数据库事务 的概念解释,简单来说: 数

KES数据库实践指南:探索KES数据库的事务隔离级别

本文深入探讨了KES数据库中的并发控制机制和事务隔离级别的重要性及实施方法。我们从并发控制的基本概念出发,详细解释了ACID原则如何通过不同的隔离级别得以实现,以及在串行化与并行执行之间的权衡取舍。通过实际操作和示例,我们展示了不同隔离级别下可能出现的脏读、不可重复读和幻读现象,以及KES数据库是如...

【MySQL】MVVC机制

MySQL隔离级别 读未提交(Read Uncommitted):某个事务读到了其他还未提交的事务对数据所作的修改,也就是某个事务只要修改了数据,其他事务就可以看到所作的修改。 这种隔离级别下会发生脏读、不可重复读、幻读。 读提交(Read Committed):某个事务提交之后,才可以被其他事务看

SQLSERVER 的四个事务隔离级别到底怎么理解?

一:背景 1. 讲故事 在有关SQLSERVER的各种参考资料中,经常会看到如下四种事务隔离级别。 READ UNCOMMITTED READ COMMITTED SERIALIZABLE REPEATABLE READ 随之而来的是大量的文字解释,还会附带各种 脏读, 幻读, 不可重复读 常常会把

ESXi上面虚拟机磁盘损坏修复案例

事故情况 最近同事反馈, 一个文件更新后出现了文件部分不可读的情况 具体现象为: 前端功能打开白屏 后端文件 前面93行不显示, notepad++打开都是 NULL 黑框. 然后重新覆盖文件, 有概率成功, 有概率失败. 遇到问题之后进行了紧急处理. 但是一开始的路线不太正确. 所以本次想总结一下

《HelloTester》第2期

1.前言 饭前喝汤:如果你的月薪低于1万,不要总想着“新机会”,而更加重要的是“练手艺”。当你有了一定的手艺可以施展,机会自然存在! 读了之前的简历篇,我想你对简历的编写有了一定的心得和体会,如果有什么疑问或者建议,又或者反对意见的话,请给我留言或者私信~,我会参考修改的。 那么简历制作好以后,我们

[转帖]磁盘读速度巨慢使用arcconf工具调整后的二次优化

情况叙述:lvm文件系统出现损坏,格式为xfs,磁盘修复失败后该节点需要重新格式化处理,格式化后重新划分pv,vg,lv,做完之后应用反应读写的速度达不到应用使用的要求,与正常的相比速度不稳定 现象:time和dd测试速度后发现写的速度为10-20MB/s 解决1:yy3:~ # chmod +x