为什么要使用MVCC技术?
数据库在不同的隔离级别下需要解决
MVCC在Mysql中的实现:
SELECT时,读取创建版本号<=当前事务版本号,删除版本号为空或>当前事务版本号。INSERT时,保存当前事务版本号为行的创建版本号DELETE时,保存当前事务版本号为行的删除版本号UPDATE时,插入一条新纪录,保存当前事务版本号为行创建版本号,同时保存当前事务版本号到原来删除的行MVCC解决了幻读问题了吗?
答案是没有。mvcc只是解决了一部分幻读的问题,也就是幻读中的读问题(因为是快照读)。
MySQL在RR级别下是通过gap lock解决了当前读情况下的幻读问题。
事务的隔离级别只涉及到了读的问题。并没有涉及到写的问题。