事务隔离级别

 

 

Read uncommitted

Read committed

Repeatable read

Serializable

定义

允许一个事务可以读取另一个未提交事务的数据

一个事务只能读取另一个已提交事务的数据

 

在同一个事务内的查询都是事务开始时刻时的值,即使两次查询时间其它事务有执行Update操作

同一条数据库记录的读写操作按照一个序列化顺序执行,不会产生交叉的情况

举例

时刻

老公

老婆

T1

余额1000

余额1000

T2

 

网购100

余额900

T3

吃饭100

余额800

 

T4

提交

 

T5

 

回滚

余额800

 

时刻

老公

老婆

T1

余额1000

余额1000

T2

 

网购100

余额900

T3

吃饭200

余额800

 

T4

 

网购100

余额800

T5

 

提交

余额100

T6

余额100

提交

不够买单

 

 

时刻

老公

老婆

T1

消费条数10

消费条数10

T2

 

网购1次

T3

 

提交

消费条数11

T4

打印

消费条数11

 

 

 

问题

脏读

一个事务读取到了另一个未提交事务的数据

对老公而言,T3时刻的查询结果受到了老婆T2时刻的影响

不可重复读

一个事务范围内两个相同的查询返回了不同数据,体现在update操作

对老公而言,T3和T6时刻相同的查询返回的余额不同

幻读

一个事务在执行两次同样条件的查询期间,因为另一个事务对数据进行了新增或者删除,导致两次查询出来的记录数不一样,体现在insert操作

对老公而言, T1和T4时刻两次查询结果不一样,凭空多了一笔消费

 

解决方案

使用Read committed

使用可重复读

使用序列化

 

改良后

时刻

老公

老婆

T1

余额1000

余额1000

T2

 

网购100

余额900

T3

吃饭100

余额900

 

T4

提交

 

T5

 

回滚

余额900

 

时刻

老公

老婆

T1

余额1000

余额1000

T2

 

网购100

余额900

T3

吃饭200

余额800

 

T4

 

网购100

余额800

T5

 

提交

余额100

T6

余额800

提交

余额100

不够买单

 

 

时刻

老公

老婆

T1

消费条数10

 

T2

打印

消费条数10

 

T3

 

消费条数10

T4

 

网购1次

T5

 

提交

消费条数11

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yexianyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值