①定义:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。 ② 举个例子 在这个场景中,B希望取款500元但又撤销,而A往账户中转入100元,就因为A事务读取B事务尚未提交的数据,账户白白丢失了500元。
①定义:A事务读取了B事务已经提交的更改数据。 ②举个例子 在事务A中,T4和T7时间点读取账户余额不一样。
①定义:A事务读取B事务提交的新增数据。(注意区分不可重复读,这里的数据是更改后的数据,比如更改/删除处理后的数据) ②举个例子 在一个事务中,两次统计存款账户的总金额,但是在两次统计的过程中,新增了一个账户,并且存入100元,就会导致两次统计的总金额不一样。 如果新增的数据刚好满足事务的查询条件(例如查询总金额),这个新数据就会进入事务的视野,因为产生了统计不一样的状况。
①定义:A事务撤销时,把已经提交的B事务的更新数据覆盖了。 ②举个例子 A事务在撤销时,将B事务已经转入账户的金额给抹去了。
①定义:A事务覆盖B事务已经提交的数据。 ②举个例子 事务A覆盖了事务B对存款余额所做的更新,导致银行最后损失了100元。 相反的,如果事务A先提交,那么用户账户将损失100元。
不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。
