
1. 拿什么拯救数据库——保护技术四章到底在考啥期末复习到数据库系统概论最容易被第4章、第5章、第10章、第11章这几块搞懵。因为它们分散在教材的不同位置单看每个章节都觉得内容不多合在一起又觉得千头万绪。有同学拿着某高校的期末复习习题册找到我说里面第4、5、10、11章全是数据库保护技术做题做到怀疑人生。我翻了翻那本习题册发现它的编排逻辑其实非常清晰——这四章恰恰是数据库管理系统最核心的看家本领安全性、完整性、恢复技术、并发控制。数据库保护技术这个概念很多人复习的时候理解窄了以为就是“做好权限管理别让人黑进来”。其实数据库的自我保护远不止这一层数据要防“不被该看的人看到”这是安全性数据本身要符合业务规则比如成绩不能超过100分这是完整性系统崩溃了数据不能丢这是恢复技术一堆人同时抢着改同一条数据不能乱套这是并发控制。四个方向合在一起才构成一套完整的数据库保护体系。这种内容最大的特点就是概念密集、术语扎堆而且互相之间有很强的关联。如果你只是机械地背诵每一章的定义很快就会发现后面章节的内容会把前面章节的记忆冲散。所以我的建议是先建立一张整体的认知地图再逐章击破。这篇内容就是结合习题册第4、5、10、11章里的高频题和易错题把数据库保护技术从头到尾拆一遍顺便说一下哪些地方真的会有人丢分哪些地方背了就能拿分。不管你是刚开始复习的小白还是已经刷完一遍题想查漏补缺的老手都能找到对应的参考。2. 第4章 数据库安全性——权限这关怎么把牢2.1 安全性在考什么概念第4章的核心主题是“哪些用户能看哪些数据”。这一章的题目类型比较固定集中在用户身份鉴别、存取控制权限管理、视图的安全作用、审计与数据加密这几个方向。习题册里出现频次最高的就是给出一段SQL让你解释含义或者反过来给出需求让你补全SQL语句。先说身份鉴别。考试通常不会考得太深知道静态口令鉴别、动态口令鉴别、生物特征鉴别、强身份鉴别这几种方式各自的特点就够了。静态口令就是传统的账号密码实现简单但是容易被猜测和窃听动态口令每次生成不同的密码安全性更高生物特征鉴别用的指纹、人脸这些强身份鉴别则是多种手段组合。这块偶尔会和后面的存取控制结合出选择题比如问“下列哪个属于用户身份鉴别方法”把视图、加密、审计混在选项里干扰大家。真正需要花大力气的是存取控制。这里有两套机制要分清楚自主存取控制DAC和强制存取控制MAC。自主存取控制的特征是数据的所有者自己决定把数据授予谁灵活性很高强制存取控制的特征是系统根据数据的密级和用户的许可证级别来做强制判断用户不能随意传递权限安全性更高但灵活性差。判断题经常直接把“MAC应用中不会出现数据泄漏”这种话拿出来问你对不对正确答案当然是否定的因为MAC本身不保证绝对的完整性保护密级标签管理不当照样会出问题。2.2 GRANT和REVOKE的必背套路习题册第4章里几乎每次必考GRANT和REVOKE的语法。你需要形成肌肉记忆级别的条件反射看到需求就能三秒钟反应出来该用什么关键字。基础用法其实就三类-- 把查询权限授予某个用户 GRANT SELECT ON Student TO U1; -- 把某几列数据的更新权限授予某个用户 GRANT UPDATE(Sgrade) ON Student TO U2; -- 收回来 REVOKE SELECT ON Student FROM U1;容易出问题的地方有三个。第一个是权限粒度。GRANT不仅可以控制到表还能控制到列。题目描述“允许U1修改学生成绩这一列”如果你写出GRANT UPDATE ON SC TO U1那就是错的因为这样把SC整张表的更新权限都给出去了。必须要精确到列名GRANT UPDATE(Grade) ON SC TO U1。第二个是WITH GRANT OPTION。这是让学生用户再授权的能力标记。题目文本里只要出现“该用户可以将自己获得的权限再授予其他用户”“允许该用户传播权限”“具有授权选项”这类描述就必须在语句末尾加上WITH GRANT OPTION。注意见。第三个是REVOKE的回收语义。回收权限时系统默认会怎么处理下游授权这就要看题目用的是RESTRICT还是CASCADE。CASCADE表示级联回收即某用户因为授权选项而授予其他人的权限也会一并回收RESTRICT表示当存在下游授权时系统拒绝回收操作。题目里如果没说默认回收行为要看教材使用的实现但考试题通常会把CASCADE这个关键词明明白白写出来你能不能判断出它到底影响了多少人才是得分关键。注意GRANT之后的权限会立即生效不需要用户重新登录。Revoke同样即时生效。考试选择题如果描述“用户必须在下次登录后才能使用新权限”这个选项是错的。2.3 视图为什么能当安全屏障视图在安全性这块的核心知识点是用它做“水平垂直”的数据隔离。水平隔离指限制行垂直隔离指限制列。典型题目是CREATE VIEW CS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept CS;然后把这张视图的查询权限授给某个用户这个用户能看到的只有计算机系学生的学号、姓名、年龄看不到其他系的学生也看不到系别字段之外的其他字段。这种做法在习题册里体现为两种问法一是给了视图创建的SQL问“该视图起到了什么安全保护作用”二是反过来问“如何创建一个视图让某用户只能看到指定学院的信息”。第二种需要你把建视图的语句写全注意字段筛选和WHERE条件两个部分都不能丢。2.4 审计和加密的考察方式审计是记录用户行为的日志机制可以审计特定表上的特定操作AUDIT ALTER, UPDATE ON Student; NOAUDIT ALTER, UPDATE ON Student;题目一般只考“审计用于发现操作发生之后的问题追踪”这个概念不会真让你写具体语句。容易混的点在于和第10章的日志恢复混在一起。恢复日志记录的是事务对数据库的修改用于故障时重做或撤销审计日志记录的是用户的操作轨迹用于安全审查。两者都叫日志但目的完全不同判断题一旦把这两者混为一谈就是妥妥的送命题。加密方面了解思想即可存储加密和传输加密都能防止数据在磁盘介质失窃或网络窃听中被暴露。代价是性能下降和密钥管理复杂度上升。题目问“加密能彻底解决数据库安全问题吗”显然不能因为加密只是防护链条的一环内部人员的越权访问、弱口令这些问题加密都管不了。3. 第5章 数据库完整性——数据不能“合理但错误”3.1 完整性和安全性千万别混这是全书最容易让人中途翻车的概念题。安全性和完整性虽然都在保护数据但保护的侧重完全不同。安全性管的是“谁可以动”完整性管的是“动出来的结果对不对”。一个没有权限的用户试图删掉他不该删的记录被系统拦下来这是安全性一个合法用户往成绩表里插入一条成绩为200分的记录被系统拦下来这是完整性。一道典型的概念题是某系统通过视图限制了销售部门员工只能查看本部门订单这属于安全性还是完整性答案当然是安全性因为限制的是访问范围。另一道题规定订单金额不能为负数插入负数时数据库拒绝执行这是完整性因为约束的是数据本身是否符合业务规则。判断标准就看系统拦截的对象是“越权访问”还是“不合规数据”。3.2 三类完整性约束的代码写法实体完整性、参照完整性、用户定义完整性这三类约束要能熟练用SQL表达。实体完整性的标志性语法是主键约束要求主键不能取空值且唯一。但注意在SQL Server系或Oracle系的实现里主键约束还有一个“隐式代价”系统会自动为主键建立唯一索引所以你在概念题里看到“实体完整性自动创建索引保证唯一性”这种描述通常是对的。参照完整性的核心是外键约束。外键引用被参照表的主键时插入或修改外键值的规则是要么为NULL要么必须能在被参照表的主键中找到对应值。这是填空题的高频答案。用户定义完整性用CHECK实现可以限制字段取值范围也可以做字段间关系约束CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Sage SMALLINT CHECK (Sage 0 AND Sage 150), Sex CHAR(2) CHECK (Sex IN (男, 女)) );UNIQUE约束虽然和主键一样都保证唯一性但有区别UNIQUE约束允许一个NULL值在不同数据库系统中情况略有不同而且一张表可以有多个UNIQUE约束但主键只能有一个。这种区别也是概念题的常客。3.3 参照完整性的违约处理是重头戏删除被参照表中的记录时如果参照表中还有引用这条记录的外键系统该干什么这是第5章最核心的一个考点没有之一。三种策略要烂熟于心NO ACTION默认拒绝执行删除操作直接报错不执行CASCADE级联删除被参照表删记录时参照表中引用它的所有记录一并删除SET NULL置为空值删除被参照表记录时参照表引用它的外键值自动变成NULL题目最常这样出有三张表教师表T、课程表C、选课表SC多级引用然后要求你判断删除教师时哪些记录会被级联删掉。这种题的做法是画引用链。教师→课程课程→选课如果每个外键都定义了CASCADE删除教师记录会一级一级往下删掉关联课程和选课记录。如果其中某一层外键的删除策略是SET NULL那这一层的记录会保留外键变成NULL但再往下引用的下层记录因为它们引用的主键还在只是外键列变成NULL所以不会继续级联。注意区分SET NULL和RESTRICT带来的传导差异。注意CASCADE产生的数据影响很大习题册里的案例分析题往往会让你评估“误删一条教师记录会牵连多少选课记录”就是考察你对级联链路的敏感度。3.4 触发器过程式完整性防线触发器这部分考试的难度两极分化。简单题考概念比如“触发器是事件驱动的过程式代码”这句话是对是错复杂题考编写给你一个业务规则让你写出对应的触发器。典型的编写题场景限制成绩不能超过百分制范围。CREATE TRIGGER Grade_Check BEFORE INSERT OR UPDATE OF Grade ON SC FOR EACH ROW WHEN (NEW.Grade 100 OR NEW.Grade 0) BEGIN RAISE_APPLICATION_ERROR(-20001, 成绩必须在0到100之间); END;这里要注意几个点触发器可以有BEFORE和AFTER两种时机BEFORE适合做校验因为可以在数据真正写入前拦截AFTER适合做联动操作比如更新汇总表。FOR EACH ROW表示行级触发器每插入一行就触发一次“语句级触发器”则是整个SQL语句执行完触发一次考试里会拿这两者的触发次数做比较。触发器与CHECK约束的关系也容易考CHECK约束是声明式的适合简单的取值范围校验触发器是过程式的适合需要复杂判断、跨表判断、附带额外操作比如记录日志、更新统计信息的场景。习题册里的一个经典选择题成绩必须在0到100之间而且插入不合法成绩时要往日志表里写入一条警告记录问用什么机制合适。答案选触发器因为CHECK约束只能在约束层面拒绝插入不能顺便往另一张表写日志。3.5 断言了解概念别深钻断言CREATE ASSERTION可以定义涉及多张表甚至聚合统计的完整性条件比如“每个部门的人数不能超过50人”。理解它比CHECK复杂、比触发器更“声明式”就够了。实际上大部分商业数据库对断言的支持并不友好所以考试很少出编写题最多出一道判断题或者概念辨析题。别在这上面花太多时间。4. 第10章 数据库恢复技术——数据丢了一切都白搭4.1 故障分类决定恢复策略第10章的核心逻辑是先分类故障再决定怎么恢复。教材一般把故障分为四类事务故障事务在运行中发生运算溢出、违反约束、人为中止等事务本身未能正常提交系统故障断电、操作系统崩溃等导致整个系统停止运行内存中的数据全部丢失介质故障磁盘损坏等物理层面的故障数据库文件本身受损计算机病毒某种意义上可以归入介质故障但不一定损坏硬件可能需要结合安全审计来处理这里最怕的就是把事务故障和系统故障的恢复动作搞混。事务故障只需要把未完成事务的更新撤销UNDO系统故障则要重做REDO那些已经提交但缓冲区中的数据还没来得及落盘的事务同时撤销未提交的事务。介质故障最严重需要利用备份副本恢复然后再重做备份之后已提交的事务。4.2 日志先行原则WAL的由来讨论恢复技术绕不开日志文件。日志里记录的是事务的每次数据更新操作格式基本是“事务标识 操作对象 更新前旧值 更新后新值”。这张图必须刻在脑子里。数据库系统为了保证故障后可恢复必须遵循“先写日志再写数据库”的原则英文缩写WALWrite-Ahead Logging。为什么非得这样假设事务把A从100改成200如果先把数据库里的A改成了200然后系统在写日志之前就崩溃了那数据库已经变成200但日志里根本没有这条更新记录恢复时无从判断该不该撤销数据库就停留在错误状态。反过来如果先写日志哪怕数据库还没写成功就崩溃恢复时也能根据日志里“A从100变成200”的记录重新执行或撤销保证数据能回到一致状态。习题册里对应考点就是填空题“日志文件的记录必须先于____的更新写入”。答案页上填“数据库”。损失分往往是因为写了“事务”而不是“数据库”细节决定成败。4.3 检查点的角色恢复加速器没有检查点时系统崩溃恢复要扫描整个日志文件可能非常慢。检查点技术是在某一时刻把日志中已经提交事务所做的更新强制刷新到数据库并在日志中记录一个检查点标记。恢复时只需要从最后一个检查点开始做REDO和UNDO检查点之前已经提交的事务无需处理。这里的必考题型是“判断各事务在故障发生时的恢复动作”。比如给出这样一组时间线T1在检查点前开始在检查点前提交T2在检查点前开始在检查点后提交T3在检查点前开始到故障时未提交T4在检查点后开始在故障前提交恢复动作为T1不需要处理检查点前已提交且已落盘T2需要REDO检查点后提交但提交动作发生在检查点后所以自检查点以来的更新可能尚未落盘T3需要UNDO未提交必须撤销其未完成的更新T4需要REDO提交了但检查点之后才提交必须重做这类题的做题步骤我总结了一个建议画时间轴把检查点画成一条竖线把每个事务的开始和提交时间点都标出来最后对照规则填表。不画时间轴直接凭感觉判断的话很容易把T2和T4搞反。4.4 恢复策略的完整流程事务故障恢复的流程是反向扫描日志找到该事务的所有更新记录对每个记录执行逆操作。比如日志里记录的是“A从100改成200”逆操作就是“把A改回100”。注意是从日志末尾往前扫因为后做的更新要先撤销。系统故障恢复的流程是正向扫描日志从最后一个检查点开始把已提交事务的重做队列中所有记录REDO把未提交事务的撤销队列中所有记录UNDO。这里会有一个细节题如果一个事务跨越了检查点在检查点前已经做了很多更新检查点后提交那它需不需要REDO答案是需要的因为从检查点到提交点之间那个事务还有更新动作这期间的数据不一定落盘。介质故障恢复流程是装入最近一次备份的数据库副本然后从备份时刻对应的日志起点开始重做所有已提交事务的更新。这个过程也常称为“前滚恢复”。习题册在这里会设置一个场景周三中午做了海量转储周四下午磁盘损坏问恢复要装哪一天的备份、重做哪些日志。答案就是装周三的备份重做周三中午之后到现在所有已提交事务的日志。4.5 备份方式的取舍静态转储是在系统不进行任何事务操作时做的备份数据一致性最好但可用性最差。动态转储是与事务执行并发的备份可用性好但备份过程中可能有事务正在修改数据所以必须记录转储期间的日志恢复时将备份和日志结合使用。海量转储是备份整个数据库增量转储是只备份上次转储以来变化的数据。增量转储显著节省时间和空间但恢复时如果只有增量备份就需要从最近一次的海量备份加上各个增量备份依次叠加恢复过程更复杂。这个“省时间但恢复复杂”的权衡关系是简答题的常考点。5. 第11章 并发控制——人多手杂怎么不出乱子5.1 先搞懂并发会带来哪些问题并发控制这一章说白了就是解决多个事务同时操作数据库时出现的三种经典问题。丢失修改是最直观的问题两个事务同时读到一个数据各自在本地做了修改最后写回时后写回的覆盖了先写回的前面事务的修改就丢了。这里我多说一句很多同学分不清丢失修改和覆盖写回的区别。比如T1把A从100改成200T2把A从100改成300如果执行顺序是T1先写回200T2再写回300那最终A是300T1的修改其实已经在数据库里被T2覆盖了这就算丢失修改。不可重复读是一个事务内两次读同一数据中间被另一个事务改了数据或增删了记录导致两次读结果不一致。注意除了一行数据本身被修改之外还有两种情况也属于不可重复读范畴一种是其他事务删除了某行第一种是其他事务插入了新行导致数量变化后者在教材里经常单列叫“幻影现象”。习题册里会把这三种情况混在一起让你区分到底属于哪种不可重复读。读“脏”数据是读到了其他事务尚未提交的修改。T1改完数据还没提交T2把它读走了之后T1因为某种原因回滚了T2读到的数据在数据库里根本不存在它就是脏数据。考试时给你一个并发调度序列让你判断产生了什么现象我的办法是逐事务、逐步地口头描述“当前这个事务看到的是什么状态”然后对号入座。你不要直接在脑子里脑补写在草稿纸上一行行推更稳妥。5.2 锁的两种类型与兼容性并发控制的基本工具是锁。排他锁也叫X锁、写锁一个事务加了X锁后其他事务不能再对该数据加任何锁共享锁也叫S锁、读锁一个事务加了S锁后其他事务还能加S锁但不能加X锁。用兼容矩阵来记住这一点锁请求方 \ 已持有方S锁X锁S锁兼容不兼容X锁不兼容不兼容理解了矩阵做题就有底气。比如两个事务都对同一数据请求S锁两者可以同时持有因为它们都在读互不干扰。一个事务持有S锁另一个事务想申请X锁修改不行必须等前一个释放S锁。在题目里给出这样的加锁申请序列让你判断每个申请是否成功就是最常规的题目。5.3 三级封锁协议由浅入深的保护等级一级封锁协议、二级封锁协议、三级封锁协议是第11章最容易混淆的内容。很多同学背了又忘是因为没有理解每一级协议到底加了个什么条件。一级封锁协议事务在修改数据前必须加X锁一直持有到事务结束提交或回滚才释放。它只解决丢失修改不解决脏读和不可重复读。二级封锁协议在一级的基础上读数据前必须加S锁读完即可释放不需要等事务结束。它进一步解决了脏读因为读的S锁会在读取后释放但如果更新事务后来回滚它读到脏数据的窗口就变小了——实际上二级协议解决脏读的关键在于读操作必须加S锁而且要在读完后尽快释放这与X锁的排他性配合保证不会读到未提交的修改。三级封锁协议在一级的基础上读数据前加S锁并且S锁要一直持有到事务结束才释放。它解决了不可重复读因为在事务结束前其他事务无法修改这个数据。我把记忆方法整理成一句话一级管“改改”二级管“读写”三级管“读读”。一级只对写加锁二级对写加锁加读加锁读后释放三级对写加锁加读加锁读持有到事务结束。表格是这样的协议写操作读操作解决丢失修改解决脏读解决不可重复读一级加X锁事务结束释放不加锁是否否二级加X锁事务结束释放加S锁读完释放是是否三级加X锁事务结束释放加S锁事务结束释放是是是注意二级和三级在读操作上的区别一个释放时点靠前一个靠后。这是两者解决不同问题的本质差异。5.4 两段锁协议与可串行化结论两段锁协议要求事务分两个阶段加锁阶段和释放锁阶段。在加锁阶段只能加锁不能释放锁进入释放阶段后只能释放锁不能再申请新锁。所以一个事务的行为必然是“先不断加锁加够了之后才开始释放锁”。这个协议最重要的结论是满足两段锁协议的任何调度都是可串行化的。可串行化意味着并发调度等价于某个串行调度各个事务交叉执行的最终结果和按某种顺序一个个执行的结果一致。这个结论经常出现在判断题和简答题中。但要清醒一点两段锁协议不一定能避免死锁。因为两个事务可以互相持有对方需要的锁然后互相等待死锁就发生了。死锁的处理分预防和检测解除两大类。预防策略包括一次封锁法一次性申请所有需要的锁和顺序封锁法按约定顺序加锁。检测解除则通过超时法或等待图法发现死锁然后选择牺牲某个事务来回滚释放它持有的锁。5.5 隔离级别的递增保护SQL标准定义了四个隔离级别从低到高是READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。分别对应不同并发问题隔离级别脏读不可重复读幻读READ UNCOMMITTED可能可能可能READ COMMITTED不可能可能可能REPEATABLE READ不可能不可能可能SERIALIZABLE不可能不可能不可能把隔离级别和前面讲的封锁协议联系起来记更有效。READ COMMITTED相当于二级封锁协议的效果防止脏读REPEATABLE READ相当于三级封锁协议的效果防止不可重复读SERIALIZABLE最严格全局可串行化。题目如果问你“某一个隔离级别用哪种锁机制实现”你就可以从这个角度推理。6. 习题册里的经典坑题与避坑指南我把这四章刷题时最容易丢分的地方汇总成一份自查清单每一条都是真实踩出来的经验。第一类概念混淆题。题目描述“某用户越权删除了不属于他的数据被系统拒绝”问这是安全性还是完整性。很明显是安全性因为系统发现的是“权限不够”不是“数据不合格”。同类题还有“视图限制用户只能看本部门的记录”也属于安全性范畴。第二类GRANT语句过程中漏掉WITH GRANT OPTION。题目明确写了“该用户拥有传播权限的能力”你却只写了基础授权。这种丢分不是不会就是审题飘了。第三类判断调度后果时没有考虑锁的释放时机。比如给了两个事务的加锁释放序列让你判断整个过程是否符合两段锁协议如果其中某个事务在持有X锁期间又申请了新的S锁就会破坏两段性。第四类把恢复日志和审计日志混在一起我在前面已经强调过。第五类触发器与约束选型题“成绩不能超过100”用CHECK但“插入不合法成绩还要记录警告日志”就必须用触发器。只看前面半句就选约束很容易漏掉后面半句的隐含条件。这五类坑在习题册里出现的频率非常高。我自己的做法是把每道错题旁边标注一个“坑类型”然后统计哪类坑最多考前只看这些标注过的题目。这个方法比重新刷一遍整本习题册高效得多。7. 冲刺阶段的高效刷题法到了临近考试的阶段习题册不要再从头到尾一页页翻。就用三轮法。第一轮快速过把第4、5、10、11章的题目快速做一遍会的直接跳过不会的、犹豫的、蒙对的都在题号旁边做标记。这一轮不用太在意正确率主要是熟悉题型分布和感受每章的题目风格建议时间控制在一天左右。第二轮深挖错题把标记的题目拉出来先不看答案重新做。如果再做还错翻开教材对应章节把涉及的知识点抄写一遍到错题本上。这个过程有点痛苦但数据库保护的内容就那几个原理啃下来以后就会非常稳。第三轮整卷模拟找一套涵盖四章内容的综合试卷严格按考试时长来做。做SQL权限题时特别注意分号平时练习可以随意考卷上漏分号或漏关键字是会被扣步骤分的。做完后把错题分类是语法错、概念错、还是调度判断错。如果是调度判断错大概率是没画时间轴下次强制自己画图。还有一个临场技巧分享给你们。遇到第10章的恢复大题先别急着看选项先画一条横线标出检查点、故障时刻再把每个事务的开始和提交时间放上去。遇到第11章的并发题先在草稿纸上写出锁兼容矩阵再逐个事务判断加锁是否成功。这套流程看起来花时间实际上能省掉大量反复读题的时间而且正确率明显更高。8. 一个扩展思路把恢复和并发放在一起复习不知道你们有没有注意到第10章和第11章的题目看起来完全不同但底层依赖的是同一个东西——事务日志。恢复技术利用日志来做UNDO和REDO并发控制的隔离级别本质上也是决定什么时候允许写日志、什么时候不允许写入。两章的核心都是围绕“事务”这个基本单位。我复习的时候尝试过把这两章合并梳理先理解事务是什么再看事务执行会遇到什么问题第11章的并发问题和第10章的故障问题最后看系统分别用什么机制解决问题封锁协议解决并发、日志加备份解决恢复。这样组合复习的好处是你不会再把UNDO和ROLLBACK搞混也不会再把两段锁协议和检查点技术搞混因为它们各自所处的问题背景完全不同一对比反而更清晰。数据库保护技术这套内容考试之外的价值同样很大。现在互联网业务里说“数据安全”“数据一致性”“高可用”本质上就是这四章内容在工程中的放大版。你去面试后端或者数据库开发岗位面试官问你“MySQL的InnoDB是怎么通过redo log和undo log保证崩溃恢复的”问的就是第10章的日志思想问你“数据库事务隔离级别有哪些”问的就是第11章的隔离级别。学校里的习题册题目看着小背后却是工业级数据库内核也在用同一套底层逻辑。我在刷这套题目时最大的感受是数据库保护技术不能靠死记硬背要自己在纸上推演一遍。比如把“T1持有X锁T2请求S锁被阻塞”这种过程画出来比默念三遍兼容矩阵都管用。如果时间紧张我建议优先把第10章“三种故障的恢复流程”手写成一张大表把第11章“三级封锁协议对比表”默写出来。这两张表到手数据库保护技术这门课的框架就算是立住了。