最简短最直白的解释:脏读、不可重复读、幻读,以及四种隔离级别的含义

导读

一条事务由、开始事务、执行事务(增删改查操作)、提交事务或回滚,三个步骤组成。

级别:读未提交

其他事务修改字段后 - 提交事务前,此期间,当前事务能读到,该字段修改后未提交的值 ,所以叫读未提交,由此会产生脏读问题。

问题:脏读

1.A字段 值为 1

2.事务A 修改 A字段 为 2

3.事务B 读取 A字段 得到 2

4.事务A 回滚 A字段 恢复为 1

5.事务B 再取 A字段 得到 1

案例中 事务B 读 A字段 两次的值不一样,原因是被 事务A 的回滚污染了,所以叫脏读。

级别:读已提交

此级别下,当前事务不会查询到,其他事务修改未提交的值,所以叫读已提交,由此解决脏读问题,但还存在不可重复读问题。

问题:不可重复读

1.A字段 值为 1

2.事务B 修改 A字段 为 2 提交

3.事务A 读取 A字段 得到 2

4.事务C 修改 A字段 为 1 提交

5.事务A 再取 A字段 得到 1

案例中 事务A 读 A字段 两次的值不一样,原因是过程中 事务B事务C 修改了值,

事务A 重复读同一字段,得到的值不同,所以叫不可重复读。

级别:可重复读

此级别下,当前事务重复读某字段,结果相同,不受其他事务修改影响,所以叫可重复读,由此解决不可重复读问题,但还存在幻读问题。

问题:幻读

1.A表 有 5 条数据

2.事务A 读取 A表 得到 5 条数据

3.事务B 向 A表 插入 1 条数据 并提交

4.事务A 再读 A表 得到 6 条数据

案例中 事务A 读 A表 两次得到的数据条数不一样,原因是过程中 事务B 插入了新数据,

因为受到其他事务增删行为影响,当前事务的同一条SQL语句两次查询的记录数不一样,就叫幻读。

级别:串行化

此级别能解决以上所有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yfeil

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

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

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

打赏作者

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

抵扣说明:

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

余额充值