数据库系统概论复习指南:三轮刷题法攻克SQL、范式与并发难点
简介这是一份面向数据库系统概论课程的期末复习试题集适合计算机专业本专科学生在考前进行知识点回顾、自测与查漏补缺也可用于考前两周集中刷题。文档采用标准试卷形式包含20道单项选择题及填空题覆盖数据库管理系统核心特点、概念模型与E-R图、物理与逻辑独立性、关系数据模型、主键选取、关系代数交集与差集、全外联接、SQL建表与授权语句、关系规范化与插入异常、数据库逻辑设计、E-R模型转换、事务隔离性、数据库恢复、共享锁与两段锁协议等高频考点每道题目均附有参考答案便于即时对照确认也能借答案解析梳理易错概念。资源包内为1个PDF文档大小174KB格式紧凑适合在电脑或手机上直接阅读也可打印后模拟练习。目前已有151人学习浏览对期末想快速抓住重点的学生来说是一份能直接做题检验掌握程度的实用复习材料。1. 为什么要刷“数据库系统概论复习期末试题及答案.pdf”这门课挂科率高的三个真相很多人在“数据库系统概论”期末前都做过一遍试卷结果是草草看了一遍题把答案盖住然后考场上题目看着眼熟手却写不出来。你手里的这份“数据库系统概论复习期末试题及答案.pdf”如果只是用来“看”那跟没下载没有区别。真正让它值回复习时间的是把题目当成检验工具按考点反向梳理教材内容而不是按顺序刷完。这门课挂科率高通常有三个真相第一题目看着简单但复合SQL和关系代数一旦嵌套就出错第二范式判断和ER图设计需要推导能力背概念根本无效第三事务并发部分概念多答题要写结构不然容易漏踩分点。这篇笔记会讲我怎么用这份PDF完成三轮刷题、六类题型的踩分点以及五个最容易丢分的坑。适合期末冲刺、补考以及想快速建立知识框架的自学者。2. 数据库系统概论考点拆解考前先画出这六张知识地图先说结论这份试题PDF不是给你“做”的是给你“拆”的。我拿到手后第一件事不是做题而是把里面的题目按考点归类和教材目录映射。数据库系统概论期末考来考去就是六个板块正好对应教材常见的几章关系模型与关系代数、SQL与完整性约束、数据库设计与范式、事务与并发控制、数据库安全与恢复、数据库系统结构。下面四节是我认为最容易丢分也最需要动手练的四块。2.1 关系模型与关系代数笔试最容易丢分的计算题关系代数考的是“运算”。不少同学把σ、π、⋈、÷的符号背得滚瓜烂熟但一碰到“查询选了所有课程的学生的学号和姓名”这类题目就卡住原因是不知道除法的语义。复习时我建议先把五个基本操作当成黑匣子选择σ负责筛行投影π负责取列并∪、差−、笛卡尔积×负责组合复合运算再在此基础上叠加。别一上来就写最终表达式先在草稿纸上画出中间结果。举个例子学生表S(学号, 姓名)选课表SC(学号, 课程号)课程表C(课程号, 课程名)。写“找出选了全部课程的学生学号”这个查询很多人的第一反应是用π学号(SC)直接结束但这里少了一步除法。正确思路是π学号(SC) ÷ π课程号(C)然后再和S连接取姓名。这个除法的中间结果是“这些学号对应的选课记录集合是否完全覆盖了课程表中的全部课程号”不画中间表很难想明白。我一般会拿两个极小的表手工算一遍比如SC里只放两行C里放一行看除法到底过滤了什么。复习动作很具体把教材或笔记里的关系代数练习题挑10道覆盖选择、投影、连接、除法、改名。每题先用中文把查询需求拆成“选哪张表、筛哪一行、留哪一列、要不要分组”再翻译成符号。如果一道题做了三遍还错说明问题不在算错而是理解错题目的语义。这时候别硬刷回教材看看对应例子通常会出现“π学号(SC)”和“÷”这种典型误用。2.2 SQL语句与完整性约束从给出表结构到写出正确SQL的七步训练SQL题是期末大分项最常见题型是“给定表结构写出查询语句”。这题不能靠背得靠流程。我总结了一套七步法检验了很多份真题都适用一读需求圈出要查的列二识别涉及哪些表判断是否需要连接或子查询三写SELECT子句四写FROM先定最核心的表五写WHERE先连接条件再过滤条件六写GROUP BY/HAVING注意聚合函数不能放WHERE七写ORDER BY并自检一遍。遇到“每门课成绩最高的学生”这种经典题目很多人直接写MAX(成绩)但还要考虑并列情况。用这套方法我对着一道典型题“查询平均成绩大于80分的学生学号和平均成绩”来演示。涉及SC表学号、课程号、成绩需要按学号分组求平均值然后筛掉平均值≤80的组。第一步圈出学号、平均成绩第二步只用SC一张表第三步SELECT 学号, AVG(成绩)第四步FROM SC第五步不需要行级过滤第六步GROUP BY 学号 HAVING AVG(成绩) 80第七步不用排序。整个过程不到30秒但如果你直接写WHERE AVG(成绩)80SQL就会在SQLite里报错因为聚合函数不能出现在WHERE里。这是最常见的丢分点。除了查询完整性约束也常以填空题或改错题出现。要记住PRIMARY KEY既包含唯一性又包含非空约束UNIQUE只保证唯一但允许一个NULL而FOREIGN KEY引用的是父表的候选键。做题时看到一个INSERT语句说违反完整性先判断违反的是哪一种空值、主键冲突还是外键引用不存在。这三类对应的错误提示在主流数据库里不一样但期末笔试只要你能说出理由就行。2.3 范式规范化与数据库设计ER图与范式判断的联动玩法范式题一直是玄学很多同学靠背“第二范式去部分依赖第三范式去传递依赖”但一到具体题目就翻车因为不知道谁是候选键。判断范式前第一件事永远是求候选键。做法是从函数依赖集出发只出现在左边而不出现在右边的属性通常含在候选键里然后闭包验证。比如关系模式R(A,B,C,D)函数依赖是A→BA→CC→D显然候选键是A因为A能推出B、CC再推出D所以A能推出全部属性。这里存在传递依赖A→C→D所以R是2NF但不是3NF。如果你直接用“有没有非主属性对键的部分依赖”来判断会发现A是单属性键没有部分依赖于是误判成3NF就错了。传递依赖的关键是“经过中间属性间接依赖”。ER图转关系模式也是必考设计题。规则不复杂实体转成一张表主键就是实体的主码1:1联系可以把一方的主码放入另一方作为外键也可以单独成表1:N联系要把“一”方的主码放入“多”方作为外键M:N联系必须单独成一张表两个实体的主码联合作为主键。我见过很多人把1:N画反导致外键方向整个错了。这里有个验证方法如果你在“N方”的实体里找不到外键那一定是反了。考试答题时建议把ER图和关系模式画在同一页先用中文说一遍联系类型再落笔转换这样即使关系模式写漏外键ER图也能帮你拿部分分。2.4 事务、并发控制与安全背了不一定会做的简答题事务部分概念密集简答题喜欢考ACID、并发一致性问题和隔离级别。答题不能只列四个单词要写结构与场景。比如脏读事务A修改了数据但未提交事务B读到这个修改若A回滚B就读到脏数据。要写出“未提交”和“回滚”两个关键词。不可重复读是同一事务两次读同一行结果被另一间隔事务修改并提交幻读则是两次查询的范围被另一事务插入或删除了行导致结果集不同。记住这个区别不可重复读针对同一条记录的旧值幻读针对一个范围的多条记录。隔离级别和并发异常的关系我建议用表格记忆。很多人把“读已提交”和“可重复读”搞混关键是看“是否禁止了不可重复读”。下表是国内教材常见的标准表述隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交禁止可能可能可重复读禁止禁止可能MySQL默认串行化禁止禁止禁止注意这里的“可能/禁止”是按SQL标准不是按某个具体数据库实现。你如果背的是MySQL的默认隔离级别答案可能不一样考试时要看清题干写的是“标准SQL”还是“MySQL”。安全方面常考权限授权SQLGRANT和REVOKE是容易写错的点要记住GRANT后需要WITH GRANT OPTION才能让被授权者再转授。这些考点在PDF里通常以简答题出现复习时不要只看答案要把答案里的动词圈出来比如“未提交”“回滚”“结果集不一致”这些才是阅卷时的采分点。3. 用试题PDF做三轮刷题法从“看不懂答案”到“默写答案”拿到这份PDF别急着用手机浏览一遍答案。我建议你准备一个空白本子和一支红笔然后按下面三轮节奏走。这套方法是我从几次复习里总结出来的核心是利用间隔重复和主动回忆比“看一遍”有效得多。3.1 第一轮按章节对答案把错题按考点归类第一轮的目标是建立“错题地图”不是测分数。随便找一段完整时间把PDF里的题目按章节顺序做一遍每道题限时两分钟超时直接跳过。做完后翻开答案不需要在试卷上打正误勾而是在题号旁标一个考点标签。比如题3在考“关系代数的除法”题17在考“判断第二范式”题22在考“GRANT授权”。标完以后把所有错题对应的考点统计一下写到一张纸上大致就能看出自己最薄弱的板块。这一步最容易犯的错误是看到一道题觉得自己“会”就直接对答案不写出来。作为一线思路你隐藏的错误会在唯一正确的地方爆发。第一轮不要做整套题卷因为整套题会把不同考点混在一起错因统计会变得模糊。把PDF按章节拆分先集中练关系代数再集中练SQL这样错因更集中也方便你对教材目录。这个阶段不用在意得分得分是第三轮的事。为了更直观我常用下面这样的表格来归类题号考点错误原因教材对应章节3关系代数除法不会处理“全部”语义第三章17模式分解候选键求错第六章22SQL授权忘了WITH GRANT OPTION第四章表格里的教材章节名可以按你手头教材的目录写也可以用知识点名称代替比如“关系代数”“范式”。关键是让自己一眼看出哪个板块错得最多。这个表格做完你会发现错误原因集中在几个模式里要么是概念不清要么是过程缺失要么是表达不规范。知道模式之后第二轮才有针对性。如果发现每章都有错题那么先优先处理关系代数和SQL因为它们分值大、可计算性强短时间能提升。3.2 第二轮隔天重做错题用“讲题法”确认理解第一轮结束后的第二天重新拿出错题本遮住答案把错题当作新题做一遍。这一次做的目的不是检验记忆而是要确认你第一轮没白看。做完后不要急着对答案先把每道题自己的解题思路用嘴讲出来。比如你刚做完一道范式判断可以对着空气说“我先求候选键候选键是A和B非主属性只有DD对候选键AB……等等D是单属性但它依赖CC不包含在候选键里所以是传递依赖因此不是3NF。”如果你讲的过程中卡壳或者被自己说笑了那说明这个知识点还是黑匣子需要回头重新看教材。这里的关键是“输出式学习”。看答案是在输入讲题是在输出。输出会强迫你找出逻辑链里的断裂点。很多同学在第二轮时发现第一轮错过的题现在能写对一半但另一半只记得答案形式比如知道要写“HAVING AVG(成绩)80”却不知道怎么推出来的。这种情况我会在题目旁边加一行注释“为什么WHERE不行因为聚合函数作用于分组后而WHERE在分组前过滤。”写下来之后这道题才算真正被你拆解。这一轮耗时可能比第一轮更长通常每天安排2小时分两次进行。间隔时间不必死守一天如果你白天复习晚上睡前可以快速重做一遍第二天早上再看一眼这样等于隔了两次。间隔重复的本质是让大脑在快要遗忘的时候重新提取一次所以第二轮的时机最好安排在“第一轮的痕迹快淡忘”的时候。如果第一轮错得很惨间隔可以缩短到半天如果错题很少间隔可以拉长到两天。3.3 第三轮考前模拟用手机定时加白纸默写考前一周找几个完整时间段把PDF里的试卷当作真题模拟。设置一个定时器完全按考试要求来不要在手机上乱翻草稿纸和白纸要足够。模拟时最容易翻车的是时间分配很多人把过多时间耗在SQL设计题上导致后面的概念简答题草草几行。我建议按题型时间和分值大致分配选择填空共25分钟关系代数与SQL计算题35分钟ER图与范式设计题20分钟事务简答题20分钟总计100分钟留20分钟检查。各校题型不同你可以根据卷面分值比例调整但原则是“大分值的题优先”。模拟结束后对答案时不要只看正误要看踩分点。简答题要检查三个东西是否写了定义、是否结合了题干场景、是否写了优缺点或需要注意的地方。计算题要检查步骤是否可读阅卷老师能不能一眼看出你的推导顺序。最后一轮建议每天只做一套题做完后花1小时复盘把仍然错的题用红笔圈出来直接进入第5章的避坑清单里找原因。如果模拟中发现自己总是在某类题上超时就在最后一周专门用这类题做限时训练。比如关系代数老超时就只练关系代数每次20分钟做5道题逼自己写中间表。别把所有希望寄托在考试时灵感一定要在考前就把节奏调好。4. 六类题型答题模板与踩分点把答案写成阅卷老师想看的结构很多同学明明会做但分数不高原因是答案写得太“意识流”。期末阅卷时间是有限的老师看的是第一步对不对、关键词有没有出现在说理部分。下面这套模板不是标准答案但可以帮你把会做的题确保拿到分把不会做的题拿到公式分。4.1 选择题与填空题排除法与关键词定位选择题不要一上来就挑正确项先读全题干尤其要警惕“不正确”“错误”“不包括”这类否定词。我在一次模拟里看到“下列叙述不属于事务ACID特性的是”结果四个选项里有一个是“隔离性”一个是“安全性”我把“安全性”选成正确因为只记住了ACID四个字母忘了题目问的是“不属于”。这种丢分完全可以通过圈题干动词避免。填空题通常会从定义、操作结果、限制条件里出比如“关系中候选码的性质是唯一性和最小性”。遇到一时想不起的词别空着先根据上下文填一个大概率词最后再反过来验证。选择题还爱考关系代数运算结果的行列数。比如给一个关系R有4行做选择条件后剩下2行问结果关系有几行几列。这种题考察的是对运算作用范围的把握画一张小表就能快速定位。我见过不少人在“并运算要求关系模式相同”上栽跟头两个关系属性不同不能直接做并必须先改名或投影到相同属性集。养成这个意识至少在题目前三秒就排除一个选项。填空往往要求精确术语比如“数据库的三级模式结构包括外模式、模式和内模式其中模式是全局逻辑结构”。复习时把这几个“是”后面的名词做填空每天默写一遍注意“模式”和“外模式”不要互换。4.2 简答题与论述题概念场景优缺点三段式简答题是拉分题。常见问法“什么是数据库的并发控制为什么需要并发控制”很多同学只写“为了保持事务隔离性”这只能得1分。我习惯的答题结构是第一句给出学术定义要包含至少一个主语和一个动词第二句结合教材或题目场景描述问题发生的时机第三句说方法也就是怎么控制。例如“并发控制是数据库系统通过一定的调度策略使多个事务相互并发地执行而互不干扰。当两个事务同时读写同一数据项时若不控制会产生脏读、不可重复读或幻读。常用的机制是锁锁分共享锁和排他锁事务在读写前需要申请相应锁。”这样答案里就有概念、时机、机制阅卷老师容易给分。如果题目问“为什么关系模式需要规范化”不要只背“消除数据冗余”要补充“更新异常”。你可以写“规范化可将一个低范式的关系分解成若干个高范式关系消除插入异常、删除异常和修改复杂减少数据冗余。”这就是概念加优缺点。论述题还要注意结构建议分点作答每一点用短句开头比如1定义2原因3措施。判卷时老师按点找分段落过长容易漏分。别用一段话写两三行。另外如果题目里出现了具体场景比如“银行转账”要在答案里引用这个场景说明A给B转账时如果系统崩溃要么都成功要么都失败所以需要原子性。没有场景的答案是死背有场景的答案是理解。4.3 设计题ER图、关系模式、SQL的串联作答ER图设计题的价值在于步骤分。通常题目会描述一个业务场景让你画ER图然后转关系模式最后写一个查询。三步是联动的中间任何一步错过都会影响后面。画ER图时先找出所有名词性实体再找动词性联系实体画方框、属性画椭圆、联系画菱形。注意属性不要挂错对象比如“学生”有“系别”属性但“系”如果还有“系主任”那就应该拆成实体“系”而不是属性。关系式转换成关系模式的规则见2.3节。写SQL时先根据自己建立的关系模式选择表名和属性名不要用题目原文的长句命名。比如题目说“学生有学号、姓名、年龄、专业”你就直接用S(sno,sname,sage,major)。如果命名不一致阅卷老师可能看不清你引用了哪个表。写完SQL再回头检查一下投影列和连接条件是否与关系模式一致。一个常见的坑是联系本身也有属性。比如“选修”联系有“成绩”属性转关系模式时如果是M:N联系联系生成的表里要包含这个属性如果是1:N联系联系属性往往不能放到N方表里因为一个学生有多门成绩你没法在一条学生记录里放多个成绩这时候要单独把联系转成一张表或者把成绩放到选课表里。判断标准是属性是否多值依赖。画图时给实体和联系标注主键能减少后面转换的思考压力。4.4 计算题关系代数、范式判定、事务调度的步骤化写法计算题最忌只写结果。比如关系代数题目即使你忘了写成最终表达式把中间的临时关系写出来也能拿一半分。范式判定题要写出候选键的求解过程不能直接说“候选键是A”。步骤是先列出每个函数依赖标记左右属性再找出不出现在右侧也不出现在左侧集合的属性将这些属性加入候选键用属性闭包验证是否能推出全部属性最后写判断结果说明为什么是2NF或3NF。事务调度题要画出事务的时间线标出冲突操作。两个事务所都可能翻车但没有标准的算法。我常建议先把“冲突可串行化”优先级判断写下来再画优先图如果无环则可串行化。事务调度的另一考点是可恢复调度和无级联回滚。答题时把每个事务的提交或回滚操作标出来再检查是否有其他事务读了未提交的数据。如果发现存在脏读那么该调度不是无级联回滚的。这样按步骤走即使结论错了中间步骤也能丢分少一点。计算题如果时间紧张至少把已知条件抄下来比如把函数依赖列表列出来把事务操作按时间轴排好。这些属于“可给分”的中间结论比你直接写个错误答案有用。5. 刷题避坑指南五个让人翻车的常见误区和排查方法这一章是我最想写的一章。很多人拿着同样的PDF复习效果却天差地别差别不在智商而在踩坑后的处理方式。下面五条全部是真实高频问题描述的也是我自己的血泪经验。5.1 现象答案一看就会合上书就忘原因你在用“浏览答案”代替“主动回忆”。眼睛看到答案的瞬间大脑会产生“我懂了”的错觉但实际上只是被动处理。解决把PDF里的答案用遮罩盖住先自己写一遍写不出来时不要立刻揭晓先回忆教材或笔记里的定义给自己一分钟的震动时间。人脑就是在“提取失败”的时候强化记忆的哪怕最后还是没想起来这次失败的经验比你直接看答案要深刻许多。如果每次都看答案等于把越野跑变成了坐车你永远记不住路况。除此之外这个坑还会在考场上放大。你觉得自己复习得很顺但遇到一个变体题大脑里找不到对应的“答案索引”就开始慌。真正的复习要让你能用自己的话解释而不是按原文复述。一个简单检验方法是把定义里的关键词去掉填充是否流畅。5.2 现象SQL全对但关系代数总漏条件原因你习惯了SQL的WHERE方式但关系代数的语义更底层。比如“查询成绩大于90或小于60的学生”SQL可以写成WHERE score90 OR score60但关系代数要先并集还是先选择有人直接写成σ_score90 ∨ score60 (SC)这其实是对的。但换成“查询所有男学生或年龄大于20的学生”时容易把选择条件写在同一σ内却忘了条件应该作用于同一关系的属性。排查方法先把条件拆成两个选择再判断用∪还是用笛卡尔积。如果不确定画两张表看中间结果的行数。另一个易漏点是连接条件。写自然连接时默认同名属性相等但人工判卷时你最好显式写出连接条件避免阅卷老师猜。关系代数的表达与SQL并不一一对应。比如SQL中的NOT EXISTS会对应关系代数的除法SQL中的LEFT JOIN在关系代数里不常用考试时如果用不上就别硬套。关键是理解每个符号对应的集合操作而不是背真题答案。5.3 现象ER图将1:N画反导致关系模式主键错误原因没有分清“一方”和“多方”。比如一个系有多个学生学生属于一个系这是1:N。如果把联系名字写成“拥有”可能误认为系是多端。解决用一个“以一查多”的验证句子一个XX对应多少个YY答案是多个说明XX是一方YY是多方。然后转关系模式时在多方表学生里加入一方表系的主键作为外键。考试时如果画反及时检查你在关系模式里外键的位置如果学生表里没有系号那一定反了。避免这个坑的最好办法是拿到题目先在草稿纸上标一下“一方系多方学生”然后再开画。还有一个延伸坑1:N联系中联系本身如果有属性一般会放在N方表里。比如学生和系之间联系“培养”没有额外属性直接外键。但如果是“借阅”这种M:N联系属性“借阅日期”必须放到联系表里不能放到学生或图书表。这个原则不掌握ER图转关系模式就会丢列。5.4 现象事务隔离级别等级背反并发问题判断失分原因你把标准SQL的隔离级别和具体数据库的实现搞混了。比如MySQL在可重复读级别会禁止大部分幻读但标准SQL说可重复读可能发生幻读。题目如果是基于教材标准就要按教材答。解决把SQL标准下的隔离级别表背熟并去掉“MySQL默认”这类口口声声挂在脑内的附加信息当题干出现具体数据库名称时再单独说明实现差异。另外一个混淆点是“不可重复读”和“幻读”。可以用一个口诀不可重复读同一条记录的值变了幻读同一范围的新行出现或消失。做题时遇到具体例子先判断修改的是已有行还是新插入的行。考试时如果时间允许把隔离级别的表画出来标出哪些异常被禁止。就算题目不直接问表本身也能帮你排除简答题里的错误选项。还有一个常见丢分点是“丢失更新”它和脏读不同丢失更新题目里要识别两个事务先后覆盖同一个值。这种题通常给一个时间线你按时间逐步执行看最终值是否被先提交的事务覆盖。5.5 现象范式判定只凭记忆不会推导候选键原因范式的定义依赖候选键而候选键的求解依赖函数依赖分析。很多同学看到关系模式直接套“第二范式去部分依赖、第三范式去传递依赖”结果遇到一个多属性候选键就挂。解决拿到题目后先求闭包把所有属性分为出现在函数依赖左侧的、右侧的、两侧的、不出现的。只在左侧不出现可以排除属性但不要排除两侧。我建议用“候选键只出现在左侧且不在右侧的属性∪出现在两侧但不被已有闭包推出的属性”这套思路然后逐个验证。这道题如果时间不够至少把上游依赖画出来也会得步骤分。候选键弄错一个典型例子是R(A,B,C)依赖A→B, B→A, B→C。这里A和B互相决定所以候选键可能是A或B单独也可能是A和B组合其实A能推BB推A和C所以A单独就是候选键B单独也能推A和C所以B也是候选键。很多人在这一步只抓“只出现在左边”的A忽略了B也能成键。所以务必做闭包验证不要只凭一条规则。6. 最后三天冲刺把这份PDF变成自己的错题知识图谱考前一天请不要做新题把这份PDF里所有错题对应的考点标签拿出来做成一张脑图。我的习惯是拿一张A4纸中心画一个圆写“数据库系统概论”向外伸出几条粗线分别写“关系代数”“SQL”“范式与设计”“事务并发”“安全性”。每一条线下用红笔写你错误最多的具体考点比如“除法不会做”“HAVING和WHERE混淆”“候选键求错”“脏读不可重复读幻读区分‘旧值/新行’”。这张纸就是你的考前禁考清单。最后一天的复习时间我一般这样分配上午只看这张纸对应的教材段落和例题每小节不超过40分钟下午做一遍PDF里最简单的选择题保持手感同时用手机定时模拟一道综合设计题按4.3节的三段式写答案晚上把纸上的每个考点口头讲给自己听凡讲不出来的打一个问号第二天早起再看一眼。用这个方法即使有三五处不知道你也清楚丢分点在哪不会考试时慌。如果是用数据库系统概论第六版复习注意按教材目录对照PDF的题号把课后习题与试题答案相互印证一遍这样做能避免复习方向和考试出题完全不同构思。对于时间紧的人我建议直接从第3章的三轮法开始先做第一轮找出错题后立刻用对应的模板纠正比泛泛看书快得多。最后想告诉你我当年就是把这份PDF当作“黑匣子”只看答案结果期末翻车。后来反过来先做题再思考只差了一天记忆牢固。希望这篇复习流程能帮你少走一点弯路祝考试顺利。本文还有配套的精品资源点击获取