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

间隙锁为什么可以减少幻读问题?

中级 单选题 第 698 题 中等 数据库系统工程师间隙锁幻读事务隔离并发控制
题目

事务 T1 查询某个分数范围内的学生记录,并希望在事务提交前这个范围内不要被其他事务插入新的记录。数据库除了锁住已有记录,还可能锁住索引记录之间的范围间隙,以阻止其他事务在该范围内插入新行。这种锁更接近()。

A 间隙锁
B 哈希摘要
C DNS 递归查询
D 项目章程
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

间隙锁锁住的是索引记录之间的范围间隙,目的通常是防止其他事务在该范围内插入新记录,从而减少范围查询前后出现“多出几行”的幻读问题。题干强调不仅锁已有记录,还要锁范围间隙,阻止插入新行,因此选间隙锁。

选项分析

A

正确。锁住索引记录之间的范围间隙,防止插入新记录,属于间隙锁语境。

B

错误。哈希摘要用于完整性校验,不是数据库并发锁。

C

错误。DNS 递归查询用于域名解析。

D

错误。项目章程用于项目授权,与数据库锁无关。

本题为什么容易错

很多同学只知道行锁,容易以为锁住查到的记录就够了。范围查询的麻烦在于:现在不存在的记录,别人也可能插进来。幻读不是同一行的值变了,而是同一范围内多了或少了行。

先看结论

简短答案

间隙锁为什么可以减少幻读问题,正确答案是 A(间隙锁)。间隙锁锁住的是索引记录之间的范围间隙,目的通常是防止其他事务在该范围内插入新记录,从而减少范围查询前后出现“多出几行”的幻读问题。题干强调不仅锁已有记录,还要锁范围间隙,阻止插入新行,因此选间隙锁。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
间隙锁 本题正确答案 正确。锁住索引记录之间的范围间隙,防止插入新记录,属于间隙锁语境。 看到题干核心场景时优先联想到它
哈希摘要 本题干扰项 错误。哈希摘要用于完整性校验,不是数据库并发锁。 看到该词不要急着选,先判断是否真正解决题干问题
DNS 递归查询 本题干扰项 错误。DNS 递归查询用于域名解析。 看到该词不要急着选,先判断是否真正解决题干问题
项目章程 本题干扰项 错误。项目章程用于项目授权,与数据库锁无关。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 哈希摘要:错误。哈希摘要用于完整性校验,不是数据库并发锁。
  • DNS 递归查询:错误。DNS 递归查询用于域名解析。
  • 项目章程:错误。项目章程用于项目授权,与数据库锁无关。
复习

知识点详解

间隙锁的核心不是锁住某条已经存在的数据,而是锁住索引区间里的空隙。这样其他事务就不能在该区间插入新记录,范围查询结果更稳定。它常和可重复读、幻读、临键锁等概念一起出现。真实数据库实现细节会因产品和隔离级别不同而变化,但软考层面抓住“防止范围内新增记录”即可。

备考速记

速记:行锁锁已有行,间隙锁锁行之间的空位;幻读怕范围里冒出新行。

并发控制在并发控制场景中的作用

并发控制在本题中的核心价值,是解决“事务 T1 查询某个分数范围内的学生记录,并希望在事务提交前这个范围内不要被其他事务插入新的记录。数据库除了锁住已有记录,还可能锁住索引记录之间的范围间隙,以阻止其他事务在该范围内插入新行。这种锁更接近()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出并发控制场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查并发控制的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把并发控制和哈希摘要、DNS 递归查询、项目章程放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
并发控制在数据库系统工程师软考中的考法

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

解题思路

这题先看查询对象:不是某一行,而是一段范围。只锁已有记录还不够,因为别人可以在这个范围里插入一条新记录,下一次读就像出现了“幻影”。间隙锁要处理的就是这个空出来的插入空间。

考点定位

幻读关注范围内行数变化,间隙锁关注锁住范围空隙,防止别人插入新行。不要把它和普通行锁混为一谈。

易错提醒

  • 把幻读和不可重复读混在一起,不区分同一行变化和范围行数变化。
  • 只考虑已有记录的行锁,忽略范围插入带来的并发问题。
  • 认为隔离级别越高越无成本,忽略锁范围扩大带来的并发下降。

备考提示

  • 并发异常记法:脏读看未提交,不可重复读看同一行,幻读看范围内多行。
  • 复习锁机制时,把行锁、间隙锁、临键锁、MVCC 和隔离级别放在一组看。
  • 数据库系统工程师题通常不深挖某个产品实现,但会考你能不能解释为什么范围查询需要锁范围。

你可能还想了解

  • 间隙锁为什么可以减少幻读问题?
  • 并发控制是什么?
  • 并发控制在数据库系统工程师考试中怎么考?
  • 数据库系统工程师并发控制题怎么理解?
  • 间隙锁和幻读关系怎么考?
  • 间隙锁为什么防止幻读怎么考?

本文小结

本题核心考点是并发控制在并发控制场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(间隙锁)。