我知道Mysql中使用锁或者MVCC可以实现并发控制,比如可重复读。但我不知道MVCC如何避免幻读。在其他地方了解到一般是通过MVCC和Gap-Lock来实现的,但是目前我理解的是MVCC不需要锁,即更新和删除都是使用undo-log来实现的。如果是的话,MVCC和锁机制是如何协同工作的呢?
例如,为了避免幻读,MVCC 会在 T1 中的某些行上添加间隙锁吗?如果是这样,当 T2 中发生更新时,MVCC 会如何处理,通常只是附加更新撤消日志?或阻止它?
mysql locking mvcc
locking ×1
mvcc ×1
mysql ×1