原文筆記

本課程筆記資料庫系統 · 30 篇
数据库补充习题 70+100 复习索引cs/db/100+70/00-复习索引Day 01 - 数据库100题:单项选择 1-20cs/db/100+70/Day01-数据库100题-选择01-20Day 02 - 数据库100题:单项选择 21-40cs/db/100+70/Day02-数据库100题-选择21-40Day 03 - 数据库100题:单选 41-50,填空 51-60cs/db/100+70/Day03-数据库100题-选择41-50填空51-60Day 04 - 数据库100题:填空 61-80cs/db/100+70/Day04-数据库100题-填空61-80Day 05 - 数据库100题:填空 81-100cs/db/100+70/Day05-数据库100题-填空81-100Day 06 - 数据库70题:试题 1-11cs/db/100+70/Day06-数据库70题-试题01-11Day 07 - 数据库70题:试题 12-25cs/db/100+70/Day07-数据库70题-试题12-25Day 08 - 数据库70题:综合题 1-8cs/db/100+70/Day08-数据库70题-综合01-08Day 09 - 数据库70题:综合题 22-33cs/db/100+70/Day09-数据库70题-综合22-33Day 10 - 数据库70题:综合题 37-47cs/db/100+70/Day10-数据库70题-综合37-47Day 11 - 数据库70题:综合题 48-61cs/db/100+70/Day11-数据库70题-综合48-61Day 12 - 数据库70题:综合题 62-71cs/db/100+70/Day12-数据库70题-综合62-71基础概念与题型全文cs/db/notes/01-基础概念与题型全文SQL语句与数据库操作全文cs/db/notes/02-SQL语句与数据库操作全文数据库编程全文cs/db/notes/03-数据库编程全文数据库设计与规范化全文cs/db/notes/04-数据库设计与规范化全文查询优化、恢复、并发控制全文cs/db/notes/05-查询优化恢复并发控制全文数据库规范化流程cs/db/notes/normalization2025-2026-2 计科数据库系统期末cs/db/pastpapers/25-26cs2024-2025-2 计科数据库系统期末cs/db/pastpapers/db-pastpaper-1数据库系统完整讲义总览与考试题型地图cs/db/tutorial/00-总览与考试题型地图01 数据库基础与关系模型cs/db/tutorial/01-数据库基础与关系模型02 SQL 与关系代数cs/db/tutorial/02-SQL与关系代数03 数据库编程专项:存储过程、触发器、游标、嵌入式 SQLcs/db/tutorial/03-数据库编程专项04 数据库设计、E-R 图与规范化cs/db/tutorial/04-数据库设计ER与规范化05 查询优化专项:关系代数、查询树、优化树cs/db/tutorial/05-查询优化专项06 事务、并发控制与数据库恢复cs/db/tutorial/06-事务并发控制与恢复07 填空选择速记清单cs/db/tutorial/07-填空选择速记清单08 大题答题模板cs/db/tutorial/08-大题答题模板

Day 07 - 数据库70题:试题 12-25

参考重点:教材第 4 章安全性、第 5 章完整性、第 11 章恢复技术、第 12 章并发控制。

12. 数据库保护的四个方面各防止什么错误的发生?

答案:

数据库保护包括安全性、完整性、并发控制和恢复四方面。

  • 安全性:防止非法用户或越权用户访问、泄露、篡改、破坏数据。
  • 完整性:防止不符合语义的数据进入数据库,例如主键重复、外键悬空、成绩超过范围。
  • 并发控制:防止多个事务交叉执行造成丢失修改、读脏数据、不可重复读、不一致分析。
  • 恢复:防止事务故障、系统故障、介质故障后数据库停留在错误或不一致状态。

讲解:可以把这四类保护记成“谁能动数据、数据是否合法、多事务怎么动、出故障怎么补救”。

13. 试解释 COMMIT 语句和 ROLLBACK 语句。

答案:

  • COMMIT:提交事务,使事务对数据库所做的更新永久生效。
  • ROLLBACK:回滚事务,撤销当前事务尚未提交的全部更新,使数据库回到事务开始前的一致状态。

SQL Server 示例:

BEGIN TRANSACTION;

UPDATE dbo.Accounts
SET Balance = Balance - 300
WHERE AccountNo = 'A001';

COMMIT TRANSACTION;
-- 如果出现错误,则执行 ROLLBACK TRANSACTION;

讲解:COMMIT 对应持久性,ROLLBACK 对应原子性。事务失败时,已做的局部更新不能留下。

14. 试解释 UNDO 操作和 REDO 操作。

答案:

  • UNDO:撤销未提交或失败事务已经执行的更新,常利用日志中的旧值把数据改回去。
  • REDO:重做已提交事务的更新,常利用日志中的新值把提交结果重新写入数据库。

讲解:系统崩溃时,内存中已提交事务的结果可能尚未写到磁盘,所以要 REDO;未提交事务的部分结果可能已经写到磁盘,所以要 UNDO。

15. DBS 运行中一般有哪几类故障?

答案:

常见故障包括:

  1. 事务故障:某个事务因逻辑错误、死锁回滚等提前终止。
  2. 系统故障:断电、操作系统崩溃等导致系统停止运行,但外存数据库未损坏。
  3. 介质故障:磁盘等外存介质损坏,导致数据库文件部分或全部丢失。
  4. 计算机病毒、恶意破坏或其他灾难性故障。

讲解:事务故障和系统故障通常可由 DBMS 自动恢复;介质故障需要后援副本和日志,往往需要 DBA 参与。

16. 试叙述 DB 的并发控制与恢复的关系。

答案:

并发控制和恢复都是为了维护数据库一致性。并发控制在正常运行时保证多个事务隔离执行,恢复在故障后保证已提交事务不丢失、未提交事务不残留。

讲解:

  • 并发控制解决“同时执行会不会互相干扰”。
  • 恢复解决“执行中出故障后怎样回到一致状态”。
  • 严格两段锁等协议能避免级联回滚,使恢复更简单。
  • 日志记录必须反映事务更新顺序,才能正确 UNDO 和 REDO。

17. 试叙述基本封锁类型的含义。

答案:

基本封锁类型有共享锁和排他锁。

  • 共享锁(S 锁):事务对数据对象加 S 锁后,可以读该对象,其他事务也可以再加 S 锁读,但不能加 X 锁写。
  • 排他锁(X 锁):事务对数据对象加 X 锁后,可以读写该对象,其他事务不能再加 S 锁或 X 锁。

讲解:相容性表要记住:S-S 相容,S-X 不相容,X-X 不相容。

18. 有些事务只要读数据,为什么要加 S 锁?

答案:

只读事务加 S 锁是为了防止读到正在被其他事务修改但尚未提交的数据,也防止读的过程中数据被改掉,从而保证隔离性。

讲解:如果读操作不加锁,可能发生读脏数据或不可重复读。S 锁允许多个读事务并发,但会阻止写事务同时修改同一对象。

19. 试叙述两段锁协议。

答案:

两段锁协议规定每个事务的封锁过程分成两个阶段:

  1. 扩展阶段:事务可以申请并获得新的锁,但不能释放任何锁。
  2. 收缩阶段:事务可以释放锁,但不能再申请新的锁。

讲解:所有事务遵循两段锁协议时,所产生的并发调度是冲突可串行化的。两段锁协议不能保证不死锁;严格两段锁要求写锁通常保持到事务结束,可避免级联回滚。

20. 列举基于日志的恢复方法的实现要点。

答案:

实现要点包括:

  1. 对每次更新登记日志,记录事务号、数据对象、旧值、新值等。
  2. 遵守先写日志原则(WAL):更新数据页写入磁盘前,对应日志必须先写入稳定存储。
  3. 事务提交时必须先写入提交日志记录。
  4. 周期性建立检查点,减少恢复时扫描日志的范围。
  5. 恢复时对已提交但可能未落盘的事务执行 REDO,对未提交事务执行 UNDO。

讲解:日志是恢复的“时间线”。没有日志,就无法知道哪些修改要重做、哪些修改要撤销。

21. 列举三种解决死锁的常用方法。

答案:

  1. 死锁预防:规定资源申请顺序,或采用时间戳策略,如 wait-die、wound-wait。
  2. 死锁检测与解除:构造等待图,发现环后回滚某个事务释放资源。
  3. 超时法:事务等待超过阈值就认为可能死锁,主动回滚。

讲解:预防法开销可能较大但避免死锁;检测法允许死锁发生再处理;超时法简单但可能误判。

22. 什么叫转储?转储有什么作用?

答案:

转储是定期将数据库复制到后援存储介质上,形成数据库后援副本的过程。作用是在介质故障或严重破坏后,用后援副本和日志恢复数据库。

讲解:转储分静态转储和动态转储。静态转储期间不允许更新,简单但影响服务;动态转储允许并发事务执行,但必须配合日志。

23. 简述 DBMS 实现完整性的方法。

答案:

DBMS 实现完整性通常包括三步:

  1. 定义完整性约束:主键、外键、UNIQUE、NOT NULL、CHECK、触发器等。
  2. 检查完整性约束:在插入、删除、修改时自动检查。
  3. 违约处理:拒绝操作,或按规则级联更新、级联删除、置空、置默认值。

SQL Server 示例:

CREATE TABLE dbo.Score (
    Sno varchar(20) NOT NULL,
    Cno varchar(20) NOT NULL,
    Grade decimal(5, 2) NULL,
    CONSTRAINT PK_Score PRIMARY KEY (Sno, Cno),
    CONSTRAINT CK_Score_Grade CHECK (Grade BETWEEN 0 AND 100)
);

讲解:完整性是“数据是否合理”的问题,不能只靠应用程序检查,应该尽量交给 DBMS 统一约束。

24. 试叙述完整性分类。

答案:

常见分类有:

  • 按关系模型基本规则:实体完整性、参照完整性、用户定义完整性。
  • 按约束对象:属性级约束、元组级约束、关系级约束。
  • 按状态变化:静态约束和动态约束。

讲解:考试最常考的是前三类。实体完整性约束主键,参照完整性约束外键,用户定义完整性表达具体业务规则。

25. 数据库安全性与完整性有什么区别?

答案:

安全性关注防止未授权访问和非法使用;完整性关注数据是否正确、有效、相容。

讲解:

  • 安全性问的是:“这个用户有没有资格看或改?”
  • 完整性问的是:“这个数据值本身合不合法?”
  • 例子:无权限用户查看成绩表是安全性问题;成绩写成 150 是完整性问题。