幻读和不可重复读有什么区别

幻读和不可重复读有什么区别
最新回答
星月满屋

2021-09-06 10:45:11

幻读和不可重复读的核心区别在于关注点不同:不可重复读聚焦于数据值的变更,而幻读聚焦于记录数量的变化。以下为具体分析:

不可重复读
指在同一事务内,多次读取同一条数据时,其值发生了变化。这种变化由其他事务的更新操作引发。例如,事务1中用户A首次查询工资为1000元,此时事务2将A的工资修改为2000元并提交。事务1再次查询时,发现工资变为2000元。关键特征

  • 同一数据:针对特定记录的值。
  • 更新操作:其他事务修改了已存在的数据。
  • 结果不一致:事务内多次读取同一记录,结果不同。
    此现象可能导致业务逻辑错误,例如银行转账中,若事务内两次读取账户余额时值被修改,可能引发超支问题。

幻读
指在同一事务内,多次执行相同查询时,返回的记录数发生变化。这种变化由其他事务的插入或删除操作引发。例如,事务1首次查询工资为1000元的员工,返回5条记录。此时事务2插入一条工资为1000元的新员工记录并提交。事务1再次执行相同查询时,返回6条记录。关键特征

  • 记录集变化:查询结果的数量或范围改变。
  • 插入/删除操作:其他事务新增或删除了符合条件的记录。
  • 范围不一致:事务内多次查询同一范围,结果集不同。
    此现象可能影响统计类业务,例如统计某部门人数时,因其他事务插入数据导致结果偏差。

总结
不可重复读与幻读均属于数据库并发控制中的异常现象,但本质差异显著:

  • 不可重复读关注数据值的变更,由更新操作导致。
  • 幻读关注记录数量的变化,由插入或删除操作导致。
    数据库通过隔离级别(如可重复读、可串行化)控制此类现象,开发者需根据业务需求选择合适的隔离级别以平衡性能与数据一致性。