当前位置: 代码迷 >> 综合 >> 先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制
  详细解决方案

先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制

热度:10   发布时间:2024-02-12 11:32:00.0

 前言

 

在大谈事务隔离机制前,我们务必要了解   脏读、不可重复读、幻读 。
因为事务隔离机制,就是为了给我们选择权利去规避脏读、不可重复读、幻读。
如果我们连问题是什么东西都不清楚,那去了解解决各问题的方案,是不是草率了。

 

所以,该篇内容主要是想用些通俗易懂的话语结合实例去 描述下,

 

什么是脏读?

什么是不可重复读?

什么是幻读?

 

 

 

正文

 

一.什么是脏读?

 

举个例子

我和你的操作分别代表两个不同的事务操作(提交事务才算完成一个事务所做的事情)。
咱们公用一个钱包(共享经济),里面没有钱。

你 执行一个事务操作,往钱包里面放入 30块钱(还未提交) 。

我 执行一个事务操作,查询 钱包里面有30块钱,开心,立刻下订单,点两倍奶茶 。

你 神经兮兮地反悔了,放入 30块钱的事务操作没有提交(或者回滚了)

我 后面没有继续查询钱包的钱了,一直以为里面有30块钱呢, 然后外卖来了, 奶茶是凉的,我也是凉的。

 

文字描述

事务 A 的未提交(还依然缓存)的数据被 事务 B 读走,如果 事务 A 失败回滚,会导致 事务 B 所读取的的数据是错误的。

 

 

二.什么是不可重复读?

 

举个例子

 

我和你的操作分别代表两个不同的事务操作。

咱们公用一个钱包(共享经济),里面有100块钱。

我 执行的事务 操作是,先看一眼钱包里面的钱, 然后跟别人说我的财富是多少多少(直接吹起来了),然后吹完后还看一眼钱包里面的钱(依依不舍)。  (同一个事务里面包含两次查询,两次查询存在间隙)

而你执行 的操作是, 悄咪咪地动了钱包的钱。(修改操作)

 

场景,

我第一次看钱包里面的钱, 是100块, 直接开始自信吹水,我有100块呢,奶茶随便喝。 

我吹的正起劲,你悄咪咪地 取走了钱包里面的 90块。

我吹水吹完了,准备再看一眼钱包的钱,结果发现,咦? 怎么只有10块? 我看多了一个零吗??? 钱包是瘪的,我也是瘪的。

 

文字描述

事务A 中 包含 两次(多次)读取数据值操作, 而事务B 在A的读取操作之间 修改数据,导致事务A 读取的数据存在不一致的混乱情况。

 

 

三.什么是幻读?

 

举个例子

我和你的操作分别代表两个不同的事务操作。

咱们公用一个钱包(共享经济),原本有100块钱,然后买奶茶用了30块,剩下70块。

大家都能看到    这条消费记录 :       买奶茶 使用   30元 ,钱包钱数   -  30 元 。

 

我 执行的事务操作是, 先看一眼 钱包的消费记录,
(心里开始计算总额减去每一条消费记录里面的钱,剩下多少钱)

然后开始吹我们勤俭节约,开始计划剩下的钱怎么用。然后吹完后 还看一眼钱包的消费记录(依依不舍)。 

(同一个事务里面包含两次查询,两次查询存在间隙)

你 执行的事务操作是,悄咪咪地消费了几次,新增了好几条消费记录。(新增/删除)

 

场景,

我第一次看钱包里面的消费记录,只有一条记录,心里神算子附身,直接计算出 100块减去这30块,那还有70块~

开始疯狂吹水,感觉我们很节约,然后还开始计划后续怎么动用这笔巨款,计划表都写好了。

在我在那叭叭叭吹水和写计划表的时候, 你悄咪咪地去消费了几把, 消费记录 -10元; -5元 ; -15元

等我写完,再去留恋一把,看一下消费记录,我人傻了。 不是只有一条数据么? 怎么这么多条???

 

 

 

Spring事务隔离机制 相比 数据库事务隔离机制其实也就多一个 default 。

事务隔离级别 作用的简单描述                     
ISOLATION_DEFAULT 使用后端数据库默认的隔离级别
ISOLATION_READ_UNCOMMITTED 允许读取尚未提交的更改。可能导致脏读、幻读或不可重复读。
ISOLATION_READ_COMMITTED (Oracle 默认级别)允许从已经提交的并发事务读取。可防止脏读,但幻读和不可重复读仍可能会发生。
ISOLATION_REPEATABLE_READ (MYSQL默认级别)对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻读仍可能发生。
ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。

 

  相关解决方案