在数据库事务隔离级别中,不可重复读幻读是两种不同的现象,主要区别如下:

1. 不可重复读(Non-repeatable Read)

  • 定义:同一事务内多次读取同一数据,结果不一致。
  • 原因:其他事务在该事务执行期间修改或删除了该数据。
  • 示例
    • 事务A读取某行数据。
    • 事务B修改或删除了该行并提交。
    • 事务A再次读取时,发现数据已变化或不存在。

2. 幻读(Phantom Read)

  • 定义:同一事务内多次执行相同查询,返回的结果集不一致。
  • 原因:其他事务在该事务执行期间插入了新数据。
  • 示例
    • 事务A执行查询,返回一组数据。
    • 事务B插入新数据并提交。
    • 事务A再次执行相同查询,发现结果集中多了新数据。

关键区别

  • 不可重复读:针对已存在数据的修改或删除。
  • 幻读:针对新数据的插入。

隔离级别的影响

  • 读已提交(Read Committed):避免脏读,但可能出现不可重复读和幻读。
  • 可重复读(Repeatable Read):避免脏读和不可重复读,但可能出现幻读。
  • 串行化(Serializable):避免脏读、不可重复读和幻读,但并发性能最差。

总结

  • 不可重复读:同一数据多次读取结果不一致。
  • 幻读:同一查询多次执行结果集不一致。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐