数据库系统工程师 · 高频练习

当前读和快照读在并发控制中怎么区分?

中级 单选题 第 684 题 中等 数据库系统工程师MVCC当前读快照读事务并发
题目

某数据库在普通 SELECT 查询时,可以读取事务开始时可见的数据版本;但执行 SELECT ... FOR UPDATE 或 UPDATE 时,需要读取并锁定最新记录,以便后续修改。关于这两类读取方式,下列说法较准确的是()。

A 普通一致性读取更接近快照读;需要读取最新版本并加锁的修改相关读取更接近当前读
B 快照读一定读取未提交数据,当前读一定不加锁
C 当前读只用于 DNS 解析,和数据库事务无关
D 快照读和当前读没有任何区别,只是两个叫法
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

快照读通常基于 MVCC 读取符合可见性规则的数据版本,普通 SELECT 常见于这种一致性读取;当前读则读取记录的最新版本,并可能加锁,常见于 UPDATE、DELETE、SELECT ... FOR UPDATE 等需要修改或锁定记录的场景。题干明确把普通查询和修改相关读取分开,因此选 A。

选项分析

A

正确。普通一致性读偏快照读,修改或锁定相关读取偏当前读。

B

错误。快照读不是脏读,它仍遵守事务可见性规则;当前读常常需要加锁。

C

错误。当前读是数据库并发控制语境中的概念,不属于 DNS。

D

错误。二者读取版本、锁行为和使用场景都有区别。

本题为什么容易错

很多同学学 MVCC 时只记住“读写不互相阻塞”,于是误以为所有读都是快照读。实际上,一旦读操作和修改、锁定、约束检查有关,就可能进入当前读语境。考试如果给出 FOR UPDATE、UPDATE、DELETE、锁定最新记录这些词,就不要再按普通快照读理解。

先看结论

简短答案

当前读和快照读在并发控制中怎么区分,正确答案是 A(普通一致性读取更接近快照读;需要读取最新版本并加锁的修改相关读取更接近当前读)。快照读通常基于 MVCC 读取符合可见性规则的数据版本,普通 SELECT 常见于这种一致性读取;当前读则读取记录的最新版本,并可能加锁,常见于 UPDATE、DELETE、SELECT ... FOR UPDATE 等需要修改或锁定记录的场景。题干明确把普通查询和修改相关读取分开,因此选 A。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
普通一致性读取更接近快照读;需要读取最新版本并加锁的修改相关读取更接近当前读 本题正确答案 正确。普通一致性读偏快照读,修改或锁定相关读取偏当前读。 看到题干核心场景时优先联想到它
快照读一定读取未提交数据,当前读一定不加锁 本题干扰项 错误。快照读不是脏读,它仍遵守事务可见性规则;当前读常常需要加锁。 看到该词不要急着选,先判断是否真正解决题干问题
当前读只用于 DNS 解析,和数据库事务无关 本题干扰项 错误。当前读是数据库并发控制语境中的概念,不属于 DNS。 看到该词不要急着选,先判断是否真正解决题干问题
快照读和当前读没有任何区别,只是两个叫法 本题干扰项 错误。二者读取版本、锁行为和使用场景都有区别。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 快照读一定读取未提交数据,当前读一定不加锁:错误。快照读不是脏读,它仍遵守事务可见性规则;当前读常常需要加锁。
  • 当前读只用于 DNS 解析,和数据库事务无关:错误。当前读是数据库并发控制语境中的概念,不属于 DNS。
  • 快照读和当前读没有任何区别,只是两个叫法:错误。二者读取版本、锁行为和使用场景都有区别。
复习

知识点详解

快照读的价值在于让普通查询读取一个一致的数据视图,减少读写直接等待;当前读的价值在于保证修改前看到的是当前最新状态,并通过锁等机制处理并发冲突。不同数据库实现细节不同,但考试重点是区分场景:查询分析偏快照,修改锁定偏当前。把这个边界弄清楚,MVCC、隔离级别和锁题会容易很多。

备考速记

速记:快照读看当时照片,当前读看现场实况。要改数据,不能只看旧照片。

MVCC 在事务并发场景中的作用

MVCC在本题中的核心价值,是解决“某数据库在普通 SELECT 查询时,可以读取事务开始时可见的数据版本;但执行 SELECT ... FOR UPDATE 或 UPDATE 时,需要读取并锁定最新记录,以便后续修改。关于这两类读取方式,下列说法较准确的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出事务并发场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查MVCC的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把MVCC和快照读一定读取未提交数据,当前读一定不加锁、当前读只用于 DNS 解析,和数据库事务无关、快照读和当前读没有任何区别,只是两个叫法放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
MVCC 在数据库系统工程师软考中的考法

软考选择题通常不会只考概念定义,还会把MVCC放到事务并发场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

老师讲 MVCC 时会提醒一句:读也分场景。只是查一眼报表,通常可以看一个一致快照;但你要更新库存、扣余额、锁住订单,就不能只看旧快照,要看当前最新记录并处理并发冲突。

考点定位

快照读看历史一致版本,当前读看最新记录并常伴随加锁。不要把 MVCC 理解成所有读都不加锁。

易错提醒

  • 把快照读误认为读取未提交数据。
  • 库存扣减时只按旧快照判断,忽略并发修改造成的冲突。
  • 认为 MVCC 完全不需要锁,忽略当前读和写操作仍可能加锁。

备考提示

  • 复习事务并发时,把 MVCC、隔离级别、快照读、当前读、行锁放在一起看。
  • 看到普通一致性查询、历史版本、可见性规则,优先想到快照读。
  • 看到最新记录、加锁、FOR UPDATE、UPDATE、DELETE,优先想到当前读。

你可能还想了解

  • 当前读和快照读在并发控制中怎么区分?
  • MVCC是什么?
  • MVCC在数据库系统工程师考试中怎么考?
  • 数据库系统工程师MVCC题怎么理解?
  • 当前读和快照读区别怎么考?
  • MVCC快照读当前读怎么考?

本文小结

本题核心考点是MVCC在事务并发场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(普通一致性读取更接近快照读;需要读取最新版本并加锁的修改相关读取更接近当前读)。