数据库|事务隔离

    xiaoxiao2023-10-09  162

    一、事务的并发问题

    脏读不可重复读幻象读第一类丢失更新第二类丢失更新
    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)