简介本资源是一套面向计算机专业本科生及备考学生的《数据库系统概论》期末复习试题与详解紧扣课程核心考点覆盖数据库基础、数据模型、关系代数、SQL语法、规范化理论、E-R建模、事务管理、并发控制与数据库恢复等关键内容。试题含20道单项选择题、9空填空题、3道简答题和5道设计题题型全面、难度适中每题均附标准答案与解析逻辑便于自测巩固与查漏补缺。资源为单文件PDF格式共1个421KB文档排版清晰、题目编号完整、答案标注明确适合作为考前冲刺刷题与知识点复盘材料。目前已有287人下载学习内容源自高校教学实践知识点表述严谨可直接用于复习规划与应试训练。1. 这份《数据库系统概论复习期末试题及答案.pdf》不是“刷题集”而是能帮你把课本第3章到第8章真正串起来的实战推演手册你手头那本王珊、萨师煊《数据库系统概论》第六版翻到第127页的“事务的ACID特性”是不是只记住了四个字母但一看到图2里T1/T2并发读写A100的场景就卡壳或者在做E-R图转关系模型时对着“3个实体3个m:n联系”愣是算不出该拆出几个表别急——这份PDF里埋着一条隐性学习路径它用20道单选题逼你辨析“模式/外模式/内模式”的映射边界用填空题第5题R(A,B,C,D)的候选码与范式判定倒逼你动手画函数依赖图更关键的是设计题第5题的BCNF分解过程完整复现了从1NF→2NF→3NF→BCNF的每一步决策树连“为什么先消部分依赖、再消传递依赖”都标好了得分点。它不教你怎么背定义而是用40分选择题10分填空10分简答25分设计15分综合的闭环结构把你拖进真实考场的思维节奏里。适合刚学完关系代数、还没敢碰事务日志和封锁协议的本科生也适合考前72小时需要快速定位知识断层的复习者——因为每道题的答案页都附带评分标准你能一眼看出自己是“概念模糊”还是“步骤漏写”。2. 从选择题到综合题五类题型背后对应的真实工程能力映射2.1 单项选择题不是考记忆而是检验你对DBMS核心组件的“直觉判断力”这20道题本质是20个微型故障排查场景。比如第1题问“数据库系统的核心是”表面选BDBMS实则在训练你区分“数据载体”A.数据库和“数据管家”B.DBMS——就像运维时看到MySQL进程挂了你要立刻意识到是mysqld服务DBMS实例出问题而非磁盘上.ibd文件数据库损坏。再看第18题S锁行为选项B正确描述“可读不可写阻塞X锁”这直接对应InnoDB中SELECT ... LOCK IN SHARE MODE的实际效果。关键参数逻辑S锁共享锁允许并发读但会阻塞任何X锁排他锁请求这是保证读一致性而不阻塞其他读的基础机制。若选错说明你没理解锁粒度与并发控制的平衡点。2.2 填空题暴露你SQL语法肌肉记忆的薄弱环节填空题第3题要求写“在Sname列建唯一索引”的SQL标准答案是CREATE UNIQUE INDEX Stusname ON student(Sname)。注意这里不能写成CREATE INDEX ... UNIQUE——SQL标准规定UNIQUE是INDEX的修饰符必须前置。而第4题“!ALL等价于NOT IN”则直指子查询陷阱当子查询返回NULL时NOT IN (1,2,NULL)永远为FALSE三值逻辑而!ALL同样失效。这解释了为什么生产环境严禁用NOT IN做关联过滤必须改用LEFT JOIN IS NULL。参数陷阱所有索引创建语句中索引名Stusname和表名student大小写敏感性取决于数据库配置MySQL默认不敏感PostgreSQL敏感但题目默认按教材惯例处理。2.3 简答题把教科书定义翻译成可落地的运维动作第1题参照完整性规则答案强调“外码值为空或等于被参照主码值”。这在实际建表时就是FOREIGN KEY (dept_id) REFERENCES dept(id) ON DELETE CASCADE中的ON DELETE策略选择——若业务要求部门删除时自动清空员工选CASCADE若要求禁止删除如财务部门则用RESTRICT。第3题日志登记原则“先写日志后写库”对应MySQL的innodb_flush_log_at_trx_commit参数设为1时每次事务提交都刷盘牺牲性能保安全设为0时每秒刷一次适合日志丢失可接受的场景。执行逻辑该原则本质是WALWrite-Ahead Logging机制的强制约束违反即导致崩溃恢复失败。2.4 设计题用SQL语句还原真实业务系统的数据流转链第2题第2小问“找供应256号商店全部商品的其它商店”标准答案用双重NOT EXISTS嵌套。拆解其执行逻辑外层查A表商店中层验证“是否存在B表中某商品256号店有而当前店没有”内层用AB1和AB2两张关联表比对商品号。这实际模拟了电商中“竞品店铺选品分析”场景——你不需要知道256店具体卖什么只需确认对手货架是否被完全复制。关键技巧此类“全包含”查询绝不能用IN或JOIN必须用NOT EXISTS否则遇到空集会返回错误结果。2.5 综合题E-R图到关系模型的转换是数据库设计能力的终极试金石题干中“工厂-产品-职工”三实体“生产-聘用”两联系标准答案生成5个表。重点看联系处理规则m:n联系“生产”必须独立成表工厂编号产品编号为主键而1:n联系“聘用”直接合并到职工表加外键工厂编号。若你画E-R图时把“聘用”画成独立实体说明没吃透“联系是否具有属性”的判定标准——题干明确“聘期和工资”属于聘用关系的属性故必须建表但若只写“职工在工厂工作”无额外属性则应合并。提示所有设计题答案都标注了得分点比如第4题视图创建中“WHERE SEX女 AND ENO IN(SELECT MGR_ENO FROM DEPT)”占2分意味着漏掉任一条件直接丢分。这不是扣字眼而是反映真实开发中权限控制的严谨性——少一个AND条件可能导致女职员数据泄露。3. 避坑95%考生栽在这些“教材没明说但阅卷严判”的细节上3.1 选择题第10题CHAR类型插入NULL的玄学陷阱现象选D5021,刘祥,NULL,NULL得分但有人填A5021,刘祥,男,21被扣分。原因题干SQL中Sex CHAR(2)未设NOT NULL但选项A的“男”是汉字占2字节而CHAR(2)在MySQL中按字符集存储——若用utf8mb4一个汉字占4字节超出定义长度导致截断或报错且标准SQL中字符串字面量必须加单引号男才合法裸写“男”语法错误。解决所有字符串值必须用单引号包裹中文字段优先用VARCHAR避免长度争议。3.2 填空题第5题候选码判定时忽略“最小性”原则现象写出A和(B,C)两个候选码但没说明为什么A不是单独候选码。原因函数依赖{A→B,A→C,A→D,(B,C)→A}中A能推出B/C/D但(B,C)→A说明A依赖于(B,C)故A不是超键而(B,C)能推出A再通过A→D,E最终(B,C)可推出全部属性且无真子集满足此条件故(B,C)是候选码。题目要求“侯选码是”必须写全且注明依据。解决找候选码三步法——先找能推出全部属性的属性集再验证其真子集是否也能推出最后确认最小性。3.3 设计题第1题关系代数表达式漏写投影操作符π现象写成C - σSNAME张三(S)⋈SC被扣1分。原因关系代数中差运算要求两关系模式相同C表只有CNO而σSNAME张三(S)⋈SC结果含SNO/CNO/GRADE等多列必须用πCNO投影出CNO列才能与C表做差。教材例题常省略π符号但考试严格按标准写法判分。解决所有关系代数表达式必须显式写出属性列表πCNO(C) - πCNO(σ... )是固定范式。3.4 综合题E-R图把“聘期”属性错误挂在职工实体上现象画职工实体框内写“聘期、工资”导致后续关系模式多建一张表。原因“聘期”和“工资”是“聘用”这个联系的属性而非职工固有属性。一个职工换工厂后聘期重置、工资可能变化说明它们依附于“聘用”关系存在。E-R图中联系的属性必须画在菱形联系内而非矩形实体内。解决判断属性归属口诀——“离开这个联系还存在吗”聘期离开聘用关系无意义故属联系。3.5 事务隔离性题混淆“丢失修改”与“读脏数据”的触发条件现象第19题图2中T1/T2并发选C不能重复读或D读脏数据。原因T1读A100→T2读A100→T1改AA-5写回→T2改AA-8写回最终A92而非95或87这是典型的丢失修改Lost Update。读脏数据需T2读到T1未提交的中间值但图中未体现提交/回滚动作。解决四类并发问题判定树——先看是否读到未提交数据脏读再看是否两次读同一数据结果不同不可重复读最后看是否出现幻读或丢失更新。4. 把答案当调试器用SQL Server/MySQL实操验证每道题的底层逻辑4.1 用真实数据库跑通设计题第3题的UPDATE语句-- 创建EMP表模拟题干 CREATE TABLE EMP ( ENO CHAR(10) PRIMARY KEY, ENAME VARCHAR(20), AGE INT, SEX CHAR(2), SALARY DECIMAL(8,2) ); INSERT INTO EMP VALUES (E001,张三,25,男,800.00), (E002,李四,28,女,900.00), (E003,王五,30,女,1200.00); -- 执行题目要求给工资1000的女职工加薪200 UPDATE EMP SET SALARY SALARY 200 WHERE SALARY 1000 AND SEX 女; -- 验证结果只有E002的SALARY从900→1100 SELECT * FROM EMP;参数说明WHERE条件中SALARY 1000必须用数字而非字符串1000否则MySQL会隐式转换但可能出错SEX 女的单引号不可省略这是SQL字符串字面量语法铁律。执行后用SELECT验证避免UPDATE无提示成功却未生效。4.2 用EXPLAIN验证设计题第2题的NOT EXISTS执行计划-- 构建A/B/AB三表简化版 CREATE TABLE A(A# CHAR(3), ANAME VARCHAR(20), WQTY INT, CITY VARCHAR(10)); CREATE TABLE B(B# CHAR(3), BNAME VARCHAR(20), PRICE DECIMAL(8,2)); CREATE TABLE AB(A# CHAR(3), B# CHAR(3), QTY INT); -- 插入测试数据略 -- 执行题目SQL找供应256店全部商品的其它店 EXPLAIN SELECT ANAME,CITY FROM A WHERE NOT EXISTS( SELECT * FROM B WHERE EXISTS( SELECT * FROM AB AB1 WHERE AB1.A#256 AND AB1.B#B.B# ) AND NOT EXISTS( SELECT * FROM AB AB2 WHERE AB2.A#!256 AND AB2.A#A.A# AND AB2.B#B.B# ) );执行逻辑EXPLAIN输出会显示typeDEPENDENT SUBQUERY证明这是相关子查询——外层A表每行都要执行内层查询。若误用JOINEXPLAIN会显示typeALL全表扫描性能暴跌。关键观察点Extra列出现Using where; Using index表示走了索引而Using temporary; Using filesort则预警性能瓶颈。4.3 用MySQL事务模拟选择题第19题的并发场景-- 开启两个会话Session1/Session2 -- Session1: START TRANSACTION; SELECT a:A FROM test_table WHERE id1; -- 读A100 UPDATE test_table SET Aa-5 WHERE id1; -- 不COMMIT -- Session2: START TRANSACTION; SELECT b:A FROM test_table WHERE id1; -- 仍读A100RR隔离级下 UPDATE test_table SET Ab-8 WHERE id1; COMMIT; -- Session1: COMMIT; -- 此时A92丢失T1的-5修改参数设置需将MySQL隔离级别设为REPEATABLE READ默认才能复现题干场景。若设为READ COMMITTEDSession2会读到Session1未提交的值变成脏读。验证技巧用SELECT transaction_isolation;确认当前级别避免环境差异导致结果不符。4.4 用Navicat可视化验证范式分解结果对设计题第5题的R(A,B,C,D,E)分解可在Navicat中创建原始表R导入测试数据执行分解后的三个表R1(A,B,C)、R21(B,C,D)、R22(D,E)对R21表右键→“设计表”→在B,C列上设复合主键对R22表设D为主键并在R21的D列上建外键指向R22.D。关键检查R21表中D列值必须全部存在于R22.D中否则外键约束报错——这验证了分解后“保持函数依赖”的正确性。注意所有实操必须在测试库进行切勿在生产库运行DDL语句。建议用Docker快速搭建MySQL环境docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:8.05. 用这份试题反向构建你的个人知识图谱从错题定位到能力缺口补全5.1 建立错题-知识点-教材页码三维映射表把做错的题归类到知识模块再锚定教材位置错题编号知识点教材章节页码补救动作选择12最小关系系统判定第2章P45重画图1中ABCD四个系统架构图填空5BCNF分解步骤第6章P189手写R(A,B,C,D)的全部范式推导设计题5函数依赖闭包计算第6章P172用Armstrong公理推导ABC→DE综合题E-R图联系属性归属第5章P138重画题干E-R图并标出所有属性执行逻辑这张表不是记录“我错了”而是标记“我在哪个认知节点断连”。比如填空5错说明你没掌握“候选码→主属性→非主属性→范式判定”的推理链必须回到P172函数依赖定义处用纸笔推导F闭包。5.2 用答案反推命题人思维识别高频考点与命题陷阱统计20道选择题发现7道题35%围绕数据独立性与三级模式题4/5/14/15/16/17/20其中题5“保证逻辑独立性需修改模式与外模式映象”是绝对高频。命题人刻意把“物理独立性”题4和“逻辑独立性”题5放相邻位置制造混淆。应对策略画三级模式图外模式→模式映象管逻辑独立模式→内模式映象管物理独立箭头方向即修改目标。5.3 把参考答案当代码审查清单逐行核对SQL书写规范设计题所有SQL答案都暗含工业级规范表名/列名全小写student/Sname符合MySQL默认行为避免大小写敏感问题WHERE条件用AND连接而非逗号WHERE SALARY1000 AND SEX女是标准写法字符串值单引号张三而非张三杜绝语法错误UPDATE必带WHERE题3答案无WHERE条件但实际执行必须加否则全表更新。血泪经验我曾因在生产库漏写WHERE用UPDATE user SET status1把所有用户激活回滚靠备份花了3小时。从此养成习惯——写完UPDATE/DELETE先CtrlF搜WHERE再执行。5.4 用综合题E-R图训练系统建模直觉从文字描述到实体关系的翻译能力题干“每个工厂聘用多名职工且每名职工只能在一个工厂工作” → 这是典型的1:n联系但“聘期和工资”是联系属性所以工厂实体工厂编号PK、厂名、地址职工实体职工号PK、姓名聘用联系工厂编号FK、职工号FK、聘期、工资主键为工厂编号,职工号。关键技巧遇到“X和Y之间有Z属性”句式Z必是联系属性。若题干说“职工有入职日期”入职日期属职工固有属性画在职工实体内但“聘用有聘期”聘期属关系画在菱形内。从那以后我每次读需求文档都强制走一遍“实体识别→联系识别→属性归属→范式验证”四步法哪怕只是写个学生选课小程序。希望帮到你。本文还有配套的精品资源点击获取