概述:

  • 在多个事务同时增删改查的情况下,如果其中有交叉的情况,可能会有不同的问题。
  • 问题严重性,由大到小排列:

脏写(Lost Update)

  • 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题。
  • 最后的更新覆盖了有其他事务所作的更新。

    脏读(Dirty Reads)

  • 事务A读取到了事务B已经修改但尚未提交的数据。

  • 如果事务B基于事务A未提交的数据进行了判断,最终事务A失败进行了回滚,事务B就坐蜡了。

    不可重复读(Non-Repeatable Reads)

  • 事务A能读取到事务B已经提交的数据。

  • 这种看似没什么问题,但是不符合隔离性,进行代码编写时,会面临数据不断变化的窘境。

    幻读(Phantom Reads)

  • 事务A读取到了事务B提交的新增数据。

  • 注意这个和上一条 不可重复读 ,都是读取到了其他事务已提交的数据,区别在于:
    • 不可重复读是对同一行数据进行操作
    • 幻读是查询多行时发现新增了一行。