不可重复读与幻影读的区别


不可重复读与幻影读的区别

并发一致性问题

  • 1.修改丢失
  • 2.读脏数据
  • 3.不可重复读
  • 4.幻影读

区别

从控制的角度来讲,不可重复读只需要锁住满足条件的记录(可能只有一行),而幻影读要锁住满足条件的及其相近的记录(是一个范围)。所以,避免幻读,必须锁住表,避免不可重复读,只需要锁住行

不可重复读和幻读最大的区别在于,如何通过锁的机制来解决它们产生的问题

可以采用悲观锁的机制来处理问题,悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。所以出于性能的考虑,成熟的数据库使用了以乐观锁为理论基础的MVCC(多版本并发控制)来避免上述两种问题。

乐观锁,大多是基于数据版本记录机制实现的。

1.SELECT : 当开始一个新事务时,该事务的版本号肯定会大于当前所有数据行快照的创建版本号。

2.INSERT : 将当前系统版本号作为数据行快照的创建版本号。

3.DELETE : 将当前系统版本号作为数据行快照的删除版本号。

4.UPDATE : 可以理解为先执行 DELETE 后执行 INSERT。


文章作者: Hailong Gao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hailong Gao !
评论
  目录