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

数据库死锁和锁等待怎么区分?

中级 单选题 第 688 题 中等 数据库系统工程师死锁锁等待事务并发数据库锁
题目

事务 T1 已锁住订单表中的记录 A,正在等待记录 B;事务 T2 已锁住记录 B,又在等待记录 A。两个事务都不主动释放自己已经持有的锁,系统需要检测并回滚其中一个事务才能继续。这个场景更接近()。

A 死锁
B 普通锁等待
C 完全函数依赖
D 外连接
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

普通锁等待通常是一方等待另一方释放锁,只要持锁事务提交或回滚,等待事务就能继续。死锁的关键是多个事务形成循环等待,每个事务都持有对方需要的资源,又等待对方先释放资源。题干中 T1 等 B、T2 等 A,形成互相等待,所以属于死锁。

选项分析

A

正确。两个事务互相持有对方需要的资源,形成循环等待,属于死锁。

B

错误。普通锁等待没有形成闭环,等待的事务通常能在持锁事务结束后继续执行。

C

错误。完全函数依赖属于关系模式规范化中的概念,与锁等待不是同一问题。

D

错误。外连接是 SQL 查询连接方式,不描述事务锁冲突。

本题为什么容易错

容易错在 B。看到“等待锁”就选锁等待,只说对了一半。考试要看等待关系有没有闭环。如果只有 T2 等 T1,通常是锁等待;如果 T1 等 T2,同时 T2 又等 T1,才进入死锁语境。

先看结论

简短答案

数据库死锁和锁等待怎么区分,正确答案是 A(死锁)。普通锁等待通常是一方等待另一方释放锁,只要持锁事务提交或回滚,等待事务就能继续。死锁的关键是多个事务形成循环等待,每个事务都持有对方需要的资源,又等待对方先释放资源。题干中 T1 等 B、T2 等 A,形成互相等待,所以属于死锁。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
死锁 本题正确答案 正确。两个事务互相持有对方需要的资源,形成循环等待,属于死锁。 看到题干核心场景时优先联想到它
普通锁等待 本题干扰项 错误。普通锁等待没有形成闭环,等待的事务通常能在持锁事务结束后继续执行。 看到该词不要急着选,先判断是否真正解决题干问题
完全函数依赖 本题干扰项 错误。完全函数依赖属于关系模式规范化中的概念,与锁等待不是同一问题。 看到该词不要急着选,先判断是否真正解决题干问题
外连接 本题干扰项 错误。外连接是 SQL 查询连接方式,不描述事务锁冲突。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 普通锁等待:错误。普通锁等待没有形成闭环,等待的事务通常能在持锁事务结束后继续执行。
  • 完全函数依赖:错误。完全函数依赖属于关系模式规范化中的概念,与锁等待不是同一问题。
  • 外连接:错误。外连接是 SQL 查询连接方式,不描述事务锁冲突。
复习

知识点详解

死锁和锁等待的区别不在于有没有等待,而在于等待是否形成无法自行打破的循环。普通锁等待是并发系统里的正常现象;死锁则会让相关事务互相卡住,需要数据库通过超时、死锁检测或回滚牺牲者来恢复。真实业务里,转账、库存扣减、批量更新都可能因为加锁顺序不一致触发死锁。

备考速记

速记:等别人是锁等待,互相等成圈才是死锁。

数据库锁在数据库锁场景中的作用

数据库锁在本题中的核心价值,是解决“事务 T1 已锁住订单表中的记录 A,正在等待记录 B;事务 T2 已锁住记录 B,又在等待记录 A。两个事务都不主动释放自己已经持有的锁,系统需要检测并回滚其中一个事务才能继续。这个场景更接近()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出数据库锁场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查数据库锁的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把数据库锁和普通锁等待、完全函数依赖、外连接放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
数据库锁在数据库系统工程师软考中的考法

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

解题思路

老师讲这类题一般会让你画一个小箭头图:T1 持有 A,想要 B;T2 持有 B,想要 A。箭头首尾相接,就是循环等待。普通锁等待只有一条等待链,前面的事务结束后后面能继续;死锁则需要系统介入,例如检测后回滚一个事务。

考点定位

锁等待不一定是死锁。死锁要看有没有循环等待:你等我,我等你,谁也走不动。

易错提醒

  • 把所有等待都叫死锁,导致排查方向过重。
  • 更新多张表时不同事务加锁顺序不一致,增加死锁概率。
  • 只设置很长的等待时间,不分析循环等待和事务顺序问题。

备考提示

  • 判断死锁先画等待关系图,看是否形成环。
  • 预防死锁常见思路包括统一加锁顺序、缩短事务时间、减少事务持锁范围。
  • 复习事务并发时,把锁等待、死锁、隔离级别、两段锁协议放在一起看。

你可能还想了解

  • 数据库死锁和锁等待怎么区分?
  • 数据库锁是什么?
  • 数据库锁在数据库系统工程师考试中怎么考?
  • 数据库系统工程师数据库锁题怎么理解?
  • 数据库死锁和锁等待区别怎么考?
  • 数据库死锁怎么判断怎么考?

本文小结

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