MVCC能否实现读已提交隔离级别,为什么?

1 个回答

  • 李后才
    醉后不知天在水,满船清梦压星河。
    ## 作用 可以。MVCC(多版本并发控制)能够实现读已提交(READ COMMITTED)隔离级别。 读已提交的要求是:事务只能读取其他事务已经提交的数据,从而避免脏读;但同一事务内两次读取之间,其他事务提交的新变化可以被读到,因此仍可能出现不可重复读和幻读。 ## 原理 - MVCC 为数据维护多个版本,读操作根据快照或可见性规则,选择当前语句可见的已提交版本。 - 在读已提交级别下,快照通常不是在整个事务期间只创建一次,而是在每条 SQL 执行时获取较新的快照。 - 因此: - 其他事务尚未提交的版本不可见,可以避免脏读; - 其他事务提交后,事务中的下一条查询能够看到新提交的版本,所以表现为读已提交。 - 相比之下,可重复读通常在事务开始时创建并冻结一次快照,事务内后续读取都基于同一快照,因此看不到事务开始后其他事务提交的数据。 网页中还介绍了两类可见性判断方式: - 基于回滚记录:通过行版本中的事务 ID、回滚指针和活跃事务视图判断版本是否由已提交事务产生。 - 基于时间戳:通过比较查询快照时间戳与数据版本提交时间戳判断可见性;若版本在快照之前提交则可见,之后提交或创建事务尚未结束则不可见。 所以,MVCC 通过“读取符合当前语句快照的已提交版本”实现读已提交,并且读写操作不会像传统锁机制那样相互阻塞。
    发布于 2026-10-27 06:00 •IP属地 浙江
    举报
    评论
    收藏