数据库|事务隔离

一、事务的并发问题

  • 脏读
  • 不可重复读
  • 幻象读
  • 第一类丢失更新
  • 第二类丢失更新
1、脏读(diety read)

①定义:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。
② 举个例子
在这里插入图片描述
在这个场景中,B希望取款500元但又撤销,而A往账户中转入100元,就因为A事务读取B事务尚未提交的数据,账户白白丢失了500元。

2、不可重复读(unrepeatable read)

①定义:A事务读取了B事务已经提交的更改数据
②举个例子
在这里插入图片描述
在事务A中,T4和T7时间点读取账户余额不一样。

3、幻读(phantom read)

①定义:A事务读取B事务提交的新增数据。(注意区分不可重复读,这里的数据是更改后的数据,比如更改/删除处理后的数据)
②举个例子
在一个事务中,两次统计存款账户的总金额,但是在两次统计的过程中,新增了一个账户,并且存入100元,就会导致两次统计的总金额不一样。
在这里插入图片描述
如果新增的数据刚好满足事务的查询条件(例如查询总金额),这个新数据就会进入事务的视野,因为产生了统计不一样的状况。

4、第一类丢失更新

①定义:A事务撤销时,把已经提交的B事务的更新数据覆盖了。
②举个例子
在这里插入图片描述
A事务在撤销时,将B事务已经转入账户的金额给抹去了。

5.第二类丢失更新

①定义:A事务覆盖B事务已经提交的数据
②举个例子
在这里插入图片描述
事务A覆盖了事务B对存款余额所做的更新,导致银行最后损失了100元。
相反的,如果事务A先提交,那么用户账户将损失100元。

总结

不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

二、事务隔离级别

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值