互联网面试宝典

您现在的位置是: 首页 > MySQL

问题详情

InnoDB 是如何解决幻读的?

面试宝典 2023-06-12 Web前端开发工程师 59
InnoDB 通过多版本并发控制(MVCC)来解决幻读问题。MVCC通过在数据行上添加隐藏的版本号来实现,对于每条数据行都会存在多个版本号,每个版本号都对应一条数据。对于每个读操作,InnoDB都会检查读取版本号是否小于当前已提交事务的版本号,如果小于则说明该数据行已被其他事务修改过,当前操作需要读取数据行的较新版本;如果大于或等于,则说明数据行未被修改过,当前操作可以直接读取该版本的数据行。

当一个事务正在执行插入、删除、更新操作时,InnoDB通过对相应的数据行加锁来防止其他事务访问该数据行,保证事务的数据一致性和可重复读性。同时,为了解决幻读问题,InnoDB在执行查询时会对表的所有行加共享锁,防止其他事务执行插入、删除操作。如果其他事务尝试插入、删除与当前查询操作的条件相符的行,则会被阻塞,直到当前查询操作完成释放共享锁。

所以,InnoDB通过MVCC和锁机制相结合的方式来解决幻读问题。这样可以保证事务的并发性,同时保证数据的正确性和可重复读性。