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

为什么统一加锁顺序可以降低数据库死锁风险?

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

事务 T1 先锁订单表再锁库存表,事务 T2 先锁库存表再锁订单表。在并发执行时,两个事务可能互相等待对方释放资源。为降低这种死锁风险,较合理的设计是()。

A 规定所有相关事务按相同顺序申请锁
B 让所有事务都不提交
C 把主键全部删除
D 把日志级别改成调试模式
题目类型:原创高频考点题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
书木兰刷题练习 适合懒人、小白的刷题通关平台
正确答案
A
答案解析

死锁常见原因之一是多个事务以不同顺序占有和申请资源,形成循环等待。统一加锁顺序可以减少循环等待条件出现的机会。例如都先锁订单再锁库存,就不容易出现你拿着订单等库存、我拿着库存等订单的互等局面。

选项分析

A

正确。统一加锁顺序可以降低循环等待概率,是常见死锁预防思路。

B

错误。不提交会长期占有资源,问题更严重。

C

错误。删除主键会破坏数据完整性,不解决死锁。

D

错误。调试日志有助于排查,但不能从机制上预防死锁。

本题为什么容易错

不少同学把死锁和普通阻塞混在一起。普通阻塞是一方等另一方释放资源;死锁是双方或多方互相等待,谁也走不下去。看到相反顺序拿锁,要马上警觉循环等待。

先看结论

简短答案

为什么统一加锁顺序可以降低数据库死锁风险,正确答案是 A(规定所有相关事务按相同顺序申请锁)。死锁常见原因之一是多个事务以不同顺序占有和申请资源,形成循环等待。统一加锁顺序可以减少循环等待条件出现的机会。例如都先锁订单再锁库存,就不容易出现你拿着订单等库存、我拿着库存等订单的互等局面。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
规定所有相关事务按相同顺序申请锁 本题正确答案 正确。统一加锁顺序可以降低循环等待概率,是常见死锁预防思路。 看到题干核心场景时优先联想到它
让所有事务都不提交 本题干扰项 错误。不提交会长期占有资源,问题更严重。 看到该词不要急着选,先判断是否真正解决题干问题
把主键全部删除 本题干扰项 错误。删除主键会破坏数据完整性,不解决死锁。 看到该词不要急着选,先判断是否真正解决题干问题
把日志级别改成调试模式 本题干扰项 错误。调试日志有助于排查,但不能从机制上预防死锁。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 让所有事务都不提交:错误。不提交会长期占有资源,问题更严重。
  • 把主键全部删除:错误。删除主键会破坏数据完整性,不解决死锁。
  • 把日志级别改成调试模式:错误。调试日志有助于排查,但不能从机制上预防死锁。
复习

知识点详解

锁是数据库系统工程师考试中需要结合场景理解的考点。围绕“为什么统一加锁顺序可以降低数据库死锁风险”这类题目,复习时要先看题干描述的是概念定义、适用场景、作用效果,还是与其他选项的区别。本题的题干关键词是“事务 T1 先锁订单表再锁库存表,事务 T2 先锁库存表再锁订单表。在并发执行时,两个事务可能互相等待对方释放资源。为降低这种死锁风险,较合理的设计是()”,它指向的核心答案是 A(规定所有相关事务按相同顺序申请锁)。

备考速记

备考速记:题干如果强调“锁”中的关键目标,就先联想到 锁;如果选项里出现 让所有事务都不提交、把主键全部删除、把日志级别改成调试模式,不要只看名称熟悉,要判断它们是否真正对应题干场景。

锁在锁场景中的作用

锁在本题中的核心价值,是解决“事务 T1 先锁订单表再锁库存表,事务 T2 先锁库存表再锁订单表。在并发执行时,两个事务可能互相等待对方释放资源。为降低这种死锁风险,较合理的设计是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出锁场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查锁的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把锁和让所有事务都不提交、把主键全部删除、把日志级别改成调试模式放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
锁在数据库系统工程师软考中的考法

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

解题思路

题干里 T1 和 T2 申请锁的顺序相反,这是死锁题非常典型的布置。老师讲并发控制时会提醒:别只背四个必要条件,要能看出循环等待是怎么形成的。统一顺序就是在源头上减少这个环。

考点定位

死锁题要抓循环等待。预防思路包括统一资源申请顺序、缩短事务时间、合理粒度和必要的超时检测。

易错提醒

  • 以为锁越多越安全,忽略锁顺序不一致带来的互等。
  • 把数据库死锁简单理解成服务器卡死。
  • 只依赖数据库自动检测死锁,不从事务设计上减少死锁。

备考提示

  • 复习并发控制时,把封锁协议、两段锁、死锁预防、死锁检测放在一起看。
  • 案例题里出现两个事务交叉申请资源,优先检查是否形成循环等待。

你可能还想了解

  • 为什么统一加锁顺序可以降低数据库死锁风险?
  • 锁是什么?
  • 锁在数据库系统工程师考试中怎么考?
  • 数据库系统工程师锁题怎么理解?
  • 数据库死锁怎么预防怎么考?
  • 统一加锁顺序为什么防死锁怎么考?

本文小结

本题核心考点是锁在锁场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(规定所有相关事务按相同顺序申请锁)。