事务 T1 已锁住订单表中的记录 A,正在等待记录 B;事务 T2 已锁住记录 B,又在等待记录 A。两个事务都不主动释放自己已经持有的锁,系统需要检测并回滚其中一个事务才能继续。这个场景更接近()。
普通锁等待通常是一方等待另一方释放锁,只要持锁事务提交或回滚,等待事务就能继续。死锁的关键是多个事务形成循环等待,每个事务都持有对方需要的资源,又等待对方先释放资源。题干中 T1 等 B、T2 等 A,形成互相等待,所以属于死锁。
选项分析
正确。两个事务互相持有对方需要的资源,形成循环等待,属于死锁。
错误。普通锁等待没有形成闭环,等待的事务通常能在持锁事务结束后继续执行。
错误。完全函数依赖属于关系模式规范化中的概念,与锁等待不是同一问题。
错误。外连接是 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(死锁)。