
简介中南大学数据库试题资料紧扣数据库原理课程大纲面向期末备考、考研复习及数据库基础自学者。资源以章节复习总纲为主线系统梳理数据库管理系统与文件系统的区别、三级模式结构、数据库语言组成以及实体-联系模型、关系模型、完整性约束和关系代数运算等核心概念并深入讲解结构化查询语言中数据定义与数据操作的区别、索引类型与约束的关系覆盖数据库安全性、完整性、故障恢复、并发控制以及范式理论中的第一、第二、第三范式和数据库应用设计的六个步骤。包内含1个Word文档大小仅164KB便携易查阅目前已有353人学习浏览。文档还收录一份完整模拟试卷题型包括单项选择、填空、术语解释与简答题部分题目附有参考答案能够帮助读者快速定位知识薄弱点在考前高效串联章节重点、查漏补缺。1. 数据库试题为什么背了定义还是丢分期末数据库考试最扎心的场景不是没复习而是复习完了、定义也背了拿到卷子一看照样在范式判断和 SQL 上翻车。很多人以为数据库是文科背住 ACID、背住三范式定义就能过关结果成绩出来才发现丢分最狠的恰恰是自己觉得最稳的题。原因很简单数据库试卷考的不是背下来而是在给定关系模式里判断第几范式和在一个具体业务场景里写对 SQL这两件事背定义帮不了你。某高校近年期末数据库试卷里关系代数和 SQL 手写占了将近一半分值剩下的一半分布在概念、范式、事务和索引设计上。整张卷子真正靠记忆拿的分只有三五分其余都需要动笔推演。这篇文章就按一张典型期末卷的结构来拆考哪些点、每个考点对应什么题型、每类题怎么稳定拿分、哪些地方最容易踩坑。目标是让你拿到任何一套数据库试卷都能按图索索知道先做哪部分、每类题用什么套路而不是靠临场手感蒙。适合看的人很明确正在准备数据库期末、考研复试或补考的在读学生以及想快速捡起数据库核心考点的工作者。下面所有内容不依赖任何特定教材以通用的关系数据库理论为准。2. 考点地图与分值分布先知道卷子里有什么再动手2.1 一张期末卷的典型模块划分数据库期末卷在结构上高度一致不管哪个学校命题核心模块不外乎六块概念题、关系代数、SQL 编写、范式判断、事务与并发、索引与优化。这六个模块的分值权重差异很大直接影响复习投入比例。以某高校近三年期末卷为例各模块分值大致如下模块典型分值题型常驻考点概念题1015选择、填空、判断三级模式、数据库特点、数据模型关系代数1520写表达式选择、投影、连接、除法、集合运算SQL 编写2530手写 SQL多表连接、聚合、子查询、增删改范式判断1015给关系模式判断范式函数依赖、2NF/3NF/BCNF事务与并发1015简答、分析ACID、隔离级别、死锁、可串行化索引与优化510设计、简答B树、聚簇索引、执行计划这个分布说明一个问题SQL 和关系代数加在一起占了半张卷子这两块靠练不靠背。范式和事务虽然分值不如 SQL 高但它们是区分度最高的题——因为大部分学生在这两块靠背定义答题而命题人恰恰用这两块拉开差距。复习策略因此清晰如果你时间有限先把 SQL 和关系代数练熟拿基础分再攻范式判断拿区分度分最后过一遍概念题和事务简答保底。这个优先级比按教材目录从头翻到尾高效得多。2.2 概念题的真实考法三级模式与两级映象概念题不是送分题。很多学生以为概念题就是数据库的特点有哪些这种默写实际卷子里常见的是给一张图让你填三级模式名称或者给一个具体场景让你判断属于外模式还是内模式。三级模式结构的核心是外模式—模式—内模式三层外加两层映象。外模式对应视图层是用户看到的局部数据模式对应逻辑层是全库的逻辑结构内模式对应物理层是存储结构。两道映象的考点落在为什么要分两层映象上——它保证逻辑独立性和物理独立性。逻辑独立性指模式变了外模式不用改物理独立性指存储结构变了模式不用改。判断题最爱在这里设坑。常见的错误说法是外模式对应物理存储结构这是把外模式和内模式的定义搞反了。另一道高频判断是一个数据库只能有一个外模式正确说法是可有多个而模式和内模式通常只有一个。这些细节靠理解三层结构的职责边界来记不靠死背。概念题里还有一个高频点关系模型的三要素即关系结构、关系操作、完整性约束。关系结构就是二维表关系操作包括选择、投影、连接等完整性约束分实体完整性、参照完整性和用户定义完整性。这里容易考实体完整性是哪个属性不能为空——主属性非空。2.3 先判断题型再决定复习顺序很多学生拿到复习资料就开始从头背到考前发现范式和事务还没看完只能裸考。更合理的方式是先拿一套往年卷或模拟卷做一次摸底看自己哪个模块丢分最多把时间投入丢分最重的模块。摸底时注意做卷子要限时模拟真实考试节奏。数据库期末卷一般 90 到 120 分钟题量不小。如果你在一个 SQL 题上磨蹭十五分钟说明多表连接的基础不牢考前练连接是性价比最高的投入。一个常见误区是重视大题忽略选择题实际上选择题里反复出现的关系代数选项、SQL 语法判断正是大题的基础。想把大题做稳先把选择题当试卷来刷错了的选项搞清楚为什么错。3. 关系代数四类必考表达式与格式规范3.1 关系代数的五类基础运算关系代数是数据库查询的理论基础期末卷一般直接要求写表达式不给写中文描述。整个关系代数体系里实际常考的就五类运算选择、投影、连接、集合运算、除法。选择和投影的区别是高频考点。选择是选行用希腊字母 σ 表示后面跟条件投影是选列用 π 表示后面跟属性列表。很多学生在简单题里能分清楚一进复合表达式就乱。判断口诀只有一句话σ 后面是条件π 后面是列名。连接运算里最常考的是自然连接和等值连接。自然连接去重合并列等值连接保留所有列。给两个关系让你写自然连接的结果表常见丢分点是没注意去重列或者是连接条件找错。除此之外集合运算考察并、交、差注意它们的条件是两个关系属性相容什么叫相容——属性个数相同、对应属性的域相同。除法是期末卷里少数会卡人的题目。它表达的是查询包含了全部相关项的语义比如查询选了全部课程的学生标准写法就是用除法。除法没有直观的代算方式考场上的稳定做法是先理解语义再把被除关系去除除关系中出现的属性看剩下属性列上的值分组是否能覆盖除关系的全部取值。3.2 从自然语言到表达式三步翻译法拿到一道关系代数的文字描述题不要直接尝试写符号按三步走就不容易错。第一步划出查询对象明确最后输出的是哪个关系的哪些属性第二步划出筛选条件看条件涉及哪个关系、要过滤什么第三步划出跨表关联看需要连接哪些关系连接条件是什么。举例说明。查询选了课程号为 C1 的学生的学号与姓名涉及学生表 S 和选课表 SC。第一步输出的是 S 的学号和姓名第二步筛选条件是 SC 课程号等于 C1第三步连接条件是 S.学号 SC.学号。表达式合成如下π 学号,姓名 ( σ 课程号C1 ( S ⋈ SC ))注意一点作业里很多人写成先投影再连接如下σ 课程号C1 ( π 学号,姓名 ( S ⋈ SC ))这样写结果是错的因为先投影丢弃了课程号列后面的选择无法访问课程号。先选择后投影或者先连接再做选择和投影顺序不要搞反。这条规则同样适用于 SQLSELECT 子句的执行顺序在概念上晚于 WHERE 子句。3.3 除法与分组语义最容易拉开差距的两道题除法题的典型描述是查询选了全部课程的学生或查询至少选了某门课的学生。后一种用连接和去重就能做前一种必须用除法。考场上的判断标准是题目里的语义是全部所有被除关系应该包含全部的那一侧。除法公式不必死记。直接写R ÷ S 表示在 R 中找出包含 S 中所有元组的值会更准确。做题时先把需求变成集合语言学号集合选课集合然后看哪些学号的选课集合包含课程全集。这一步想通后表达式基本能写对。另一个常考点是带分组的统计但关系代数考试的大多数题目不要求写 GROUP BY。如果题目要求查询每个系的学生人数关系代数表达式里不直接体现分组你很可能会为了表达每个而卡壳。这时可以先用 SQL 想清楚逻辑再倒推关系代数思路会更顺。下面这个 SQL 聚合问题在关系代数里一般不考但理解它的语义对做除法有帮助SELECT 系, COUNT(*) FROM S GROUP BY 系;记住一个原则关系代数题的分丢在想当然上。选课表与课程表做自然连接时有些课程没有学生选自然连接会丢掉这些课程的行如果题目要求保留所有课程名就得改成左外连接。要不要用外连接看题目说没说包括没有被选的课程说了就必须外连接。4. SQL 手写五类必考语句与判卷采分点4.1 多表连接的两种写法隐式与显式SQL 大题是数据库试卷的绝对核心判卷一般按采分点给分。采分点主要在表连接条件、筛选条件、分组字段、聚合函数、排序字段。不是整句错就整题零分每丢一个条件扣一块分所以写 SQL 时先保证每个语义条件都有对应的行再去美化语法。多表连接有两种主流写法。隐式连接把连接条件放在 WHERE 里在多表查询里容易漏条件导致结果变成笛卡尔积。显式连接用 JOIN ON连接条件跟着连接走漏了连接条件会有语法提示。期末卷判分更看重功能正确我会建议平时练习全部用显式写法可读性高且不容易写漏。两种写法对比如下-- 隐式连接连接条件在 WHERE SELECT S.学号, S.姓名, SC.成绩 FROM S, SC WHERE S.学号 SC.学号 AND SC.课程号 C1; -- 显式连接连接条件在 ON SELECT S.学号, S.姓名, SC.成绩 FROM S JOIN SC ON S.学号 SC.学号 WHERE SC.课程号 C1;显式写法的逻辑是JOIN 决定两张表的行怎么配对WHERE 决定配对后怎么筛选。把行配对和行筛选分到两个子句里一条语句哪怕再长读起来也不会乱。上一章关系代数里强调的先选择再投影在这里对应的是先 WHERE 再 SELECTSQL 的实际执行顺序也大致如此虽然逻辑上 SELECT 写在最前面。4.2 聚合查询与 GROUP BY 的必踩坑聚合函数配合 GROUP BY 是 SQL 大题里的送命题。最常见的错误是 SELECT 里出现了不在 GROUP BY 里、也不是聚合函数的列。很多数据库允许这种查询并随机返回一个值直接让统计结果意义错乱。判断一道 SQL 有没有聚合逻辑看题目里的每个各平均总数这类词。出现每个班级的平均分分组字段就是班级SELECT 里出现的班级列要么在 GROUP BY 里要么当分组字段本身。出现平均成绩大于 80 分的学生分组字段是学号HAVING 条件筛平均分注意筛选分组后条件的子句是 HAVING不是 WHERE。一个高频考题组合查询每门课程的最高分和选课人数。参考写法SELECT 课程号, MAX(成绩) AS 最高分, COUNT(*) AS 选课人数 FROM SC GROUP BY 课程号;这里有三个采分点GROUP BY 课程号、MAX(成绩)、COUNT()漏一个扣一个。如果想筛掉选课人数小于 10 的课程加 HAVING COUNT() 10注意 HAVING 放在 GROUP BY 之后、ORDER BY 之前。WHERE 和 HAVING 的分工规则只有一句话WHERE 筛原始行HAVING 筛分组结果。4.3 子查询的嵌套与 EXISTS 用法子查询分相关子查询和非相关子查询。非相关子查询与外部查询无关先执行完再返回结果相关子查询用到外部查询的列逐行判断性能较差但表达能力更强。试卷常考的查询成绩高于平均成绩的学生用非相关子查询就够了SELECT 学号, 成绩 FROM SC WHERE 成绩 (SELECT AVG(成绩) FROM SC);相关子查询典型场景是查询选了全部课程的学生这题用两条路可以写。一条用 NOT EXISTS 表达不存在他没选的课程另一条用分组计数比较课程总数。NOT EXISTS 写法比较绕但它是理解相关子查询的经典题目SELECT 学号 FROM S WHERE NOT EXISTS ( SELECT 1 FROM C WHERE NOT EXISTS ( SELECT 1 FROM SC WHERE SC.学号 S.学号 AND SC.课程号 C.课程号 ) );内层子查询判断这门课他没选外层 NOT EXISTS 表示不存在这样的课。注意 SC 表里的学号和课程号都用到了外部查询的列这才是相关子查询的特征。很多学生在这里直接把外层 S.学号写成固定值或者漏掉 SC.课程号 C.课程号 的关联条件写出来的结果完全错。判卷对子查询只在乎结果对不对和条件是否完整不要求唯一写法。如果你对 EXISTS 不熟用分组计数也能写对没必要赌自己不熟的语法。SQL 题的原则是先保证对再追求简洁。4.4 增删改与视图不能丢的分期末卷 SQL 部分不只是查询更新操作也常考。插入用 INSERT INTO 值列表注意列和值的顺序要一一对应删除用 DELETE FROM 加 WHERE注意不写 WHERE 会清空整张表修改用 UPDATE SET 加 WHERE。视图题常与权限管理一起考。创建视图的关键是明确视图对应的查询之后对视图的查询和普通表一样。在这里要说明的是视图在期末卷里一般不要求说底层如何实现但要知道视图不存储数据、是虚拟表改视图定义用 CREATE OR REPLACE VIEW。如果在 DELETE 时忘记写 WHERE这是期末卷简答题常见的错误案例回答时说明后果即可不需要展开。4.5 SQL 题的三种查错方法写完 SQL 不检查直接交卷是最亏的。判卷时很多低级错误是因为运行时报错才知道比如列名拼写、字符串引号漏写。检查时先看 FROM 和 JOIN 是否覆盖了题目提到的所有表再看 WHERE 是否漏了连接条件或筛选条件最后看 SELECT 列名是否和 FROM 中的表一一对应。如果不确定自己写的 SQL 对错把题目语义拆成断句一个半句对应一个条件。题目若有四句话你的 SQL 里至少应该有四个可对号入座的条件或子句。这个检查法对查询题和更新题都适用多练几套题后基本能一眼看出缺了什么条件。条件数量对不上先改条件不要急着重写。5. 范式与函数依赖判断第几范式的四步法5.1 函数依赖与候选键范式题的起点范式判断题的第一步不是背定义而是找函数依赖和候选键。候选键是最小超键能唯一确定一个元组且去掉任一属性后不再具有这个性质。找候选键的稳定方法是先看哪些属性不出现在任何函数依赖的右侧它们很可能属于每个候选键再尝试由这些属性出发看能否推出全部属性。给定关系模式 R(A, B, C, D)函数依赖 F {A→B, B→C, D→A}。第一步找出只出现在左侧或两边都不出现的属性这里是 D因为 D 不在任何依赖的右侧。由 D 出发D→AA→BB→C能推出全部四个属性所以 D 是候选键。如果 D 不能推出全部属性就尝试把其他属性加进来拼最小超键。函数依赖的闭包计算也常在小问里出现。求属性集 X 的闭包就是反复应用函数依赖推出新属性直到不再增加。这个过程手工做就可以不需要写程序。注意函数依赖的传递性A→B 且 B→C则 A→C这是判定传递依赖和范式级别的基础。5.2 范式级别的核心判定表范式判定不需要每次都从头推理直接对照判定表即可。三大范式的核心区别在于非主属性对候选键的依赖方式范式判定条件反例特征1NF属性不可再分某个属性是集合或列表2NF满足 1NF 且无非主属性对候选键的部分依赖候选键是复合键某个非主属性只依赖复合键中的一部分3NF满足 2NF 且无非主属性对候选键的传递依赖非主属性依赖另一个非主属性间接依赖候选键BCNF 比 3NF 更严格它要求每个决定因素都包含候选键。也就是说BCNF 不仅管非主属性也管主属性。给出函数依赖 A→B而 A 不是候选键也不是候选键的超集即使 B 是主属性这个模式也不满足 BCNF。期末卷最容易设在 2NF 上的坑是候选键是单属性需不需要判断 2NF。单个属性的候选键不存在部分依赖因为部分依赖的定义前提是候选键是属性组合。这里想表达的是很多学生看到复合候选键就默认有部分依赖实际要看依赖关系是否真的只用到候选键的一部分。5.3 模式分解的两种算法选择考到模式分解时通常要求分解到 3NF 或 BCNF并保持函数依赖。3NF 分解的稳定做法是对每个函数依赖的左侧相同的一组依赖把涉及的所有属性合成一个关系模式再调整使每个模式包含候选键之一。BCNF 分解的做法是找到不满足 BCNF 的函数依赖 X→Y把关系拆成 XY 和 R−Y 两部分然后递归检查每个子模式直到全满足。注意分解要保证无损连接判断无损连接的必要条件是分解出的两个模式的公共属性是其中一个的候选键。判断分解是否保持函数依赖方法是看所有分解出的子模式的函数依赖闭包并集是否等于原闭包。如果丢了依赖说明分解后函数依赖不再成立。这里有个直观的理解方式如果原关系里 A→B但分解后 A 和 B 分别落到两个模式里且模式间没有可连接的公共属性这条依赖就丢了。5.4 一个考场通用的四步判定流程不管题目问的是第几范式统一按四步走就能拿稳分。第一步判 1NF看有没有重复组或复合属性第二步找候选键用依赖图或闭包计算第三步判 2NF检查非主属性对复合候选键有没有部分依赖第四步判 3NF检查非主属性之间有没有传递依赖。每一步都要写出判断依据不要只写结论。判卷时该模式满足 2NF 但不是 3NF这种结论写对只能拿一半分因为你没写为什么。正确示范是候选键是 AB非主属性 C 完全依赖于 AB但 D 依赖 C 而 C 不是候选键存在传递依赖故不满足 3NF。范式的边界情况要额外说明3NF 满足 2NFBCNF 满足 3NF1NF 是最低要求。判断顺序永远是从低到高不要跳级。6. 避坑手册数据库试题里五个高频翻车点6.1 现象关系代数选择条件写错属性归属某次练习题目是查询成绩大于 90 分的学生姓名学生写出了 σ SC.成绩90 (S)看起来没问题。但表达式里 S 关系没有成绩属性运行或手算时就会报错或得不到结果。原因选择条件的属性归属没确认直接从题目文字里照搬没看属性在哪个关系里。解决写关系代数前先列出每个关系的属性集确认条件里的属性属于哪个关系。如果条件属性和输出的属性不在同一个关系里必须先做连接再做选择。这个步骤养成习惯后这类错误基本能够杜绝。6.2 现象SQL 题目筛选用 WHERE 而不是 HAVING题目查询平均成绩大于 80 分的课程号和平均成绩有学生写成 SELECT 课程号, AVG(成绩) FROM SC WHERE AVG(成绩) 80 GROUP BY 课程号。原因混淆了 WHERE 和 HAVING 的执行阶段。WHERE 在分组之前执行AVG 在分组阶段才计算WHERE 阶段访问不到聚合结果。解决凡是条件里出现聚合函数的筛选一律用 HAVING。判断方法是看条件是否包含 MAX、MIN、AVG、SUM、COUNT 这类聚合函数包含则用 HAVING不包含则先考虑 WHERE。这是判卷中非常常见的一类扣分点原因很简单因为它同时测试了执行顺序和子句语义两个知识点都答对才能拿分。6.3 现象范式题判断 BCNF 时忽略主属性的传递依赖给定 R(A, B, C)函数依赖 A→B, B→A, B→C。一些学生会判定它是 3NF然后直接跳到结论说不是 BCNF 但不说明为什么。原因只看非主属性的依赖忽略候选键内部依赖与决定因素。解决先找候选键。A 能推出全部属性B 也能推出全部属性所以主属性是 A、B、C。函数依赖 B→C 里决定因素 B 本身就是候选键没问题但若检查 B→A 的右侧是主属性B 仍是候选键也满足 BCNF。这道题实际是满足 BCNF 的。真正不满足 BCNF 的反例是决定因素不是候选键比如 A→B 而 A 不是候选键。记住判定顺序是完整写出候选键和所有函数依赖再逐条检查决定因素是否候选键。6.4 现象事务隔离级别与锁的语义搞反简答题问可重复读事务隔离级别能否防止幻读有学生写了能。原因把可重复读和可串行化混为一谈或者只记结论不理解底层实现。解决不同隔离级别对三种异常的控制不同。读未提交不能防任何异常读已提交防脏读可重复读防脏读和不可重复读可串行化全部防止。注意幻读是可重复读级别下仍可能出现的异常因为锁机制只锁现有行不锁范围。这是概念题和简答题常见设坑点答题时写清楚可重复读防止不可重复读但不防幻读即可。6.5 现象更新语句漏写 WHERE 导致全表数据变更某次期末模拟题考把课程号为 C1 的成绩加 5 分学生写了 UPDATE SC SET 成绩 成绩 5。原因审题不细题目给了 WHERE 条件但被忽略或者急于先写 SET 忘了条件。解决执行更新操作前先圈出题目里的筛选条件比如课程号为 C1把它原样转成 WHERE 子句。做 UPDATE 和 DELETE 时先写 WHERE 再写 SET 或直接先写完整语句再检查条件。日常练习中培养更新题必查 WHERE的条件反射比任何检查技巧都有用。6.6 现象关系代数表达式漏掉去重题目要求查询选了 C1 或 C2 课程的学生学号有学生写 π 学号(σ 课程号C1 ∨ 课程号C2 (SC))得到的结果里有重复学号因为同一个学生可能两门课都选。原因关系是集合不是包投影结果应该自动去重。手算时沿用 SQL 的习惯没有去重导致集合语义不符。解决关系代数表达式中投影默认去重只要题目语义是查询学生的学号这类集合结果就不需要额外写 DISTINCT。如果题目要求保留重复值常见做法是用包关系代数语义但期末卷基本不考这种反常规情况。考场上直接按集合语义写不会错。7. 考前冲刺用一张出错表提升复习效率最后一个技巧也是我个人带学生复习时最常用的一套方法做一套模拟题后不要只对分数把所有错题按模块整理进一张出错表。表里只记三列错误类型、具体错误、改写后的正确做法。这样比反复刷题更能定位薄弱点。我见过太多学生做了五套卷子每套都在聚合函数上丢分但从来不停下来反思为什么丢分。把错误量化后你会发现自己真正的薄弱点可能只有两三个模块而不是整本书都差。比如三套卷子在SQL 分组字段漏写上各丢一次分那么这一条就是考前最后一个晚上最值得看的地方。一个真实体感的例子某学生期末复习时最怕范式题刷了十道范式判断题还是错。我给他做了两张表一张是候选键计算练习一张是范式判定流程他花了一个晚上把这些步骤走顺再做题准确率明显提升。问题不是他不聪明而是没有把模糊的直觉变成固定的执行步骤。任何看起来凭感觉的题都可以拆成步骤一步步执行就能稳定拿分。考前一天的复习安排我给三个具体建议。第一把出错表从头到尾看一遍每一条都是你曾经踩过的坑比新题更值得看。第二重做错题而不是重做对题对题只能给你虚假的安全感。第三把范式判定四步法和 SQL 条件检查法默写一遍这两个是最容易在考场上用到的框架也最容易因为紧张而忘。数据库考试不像数学不像编程竞赛不要求创造性解法。它考的是你能否在一套题里稳定复现课内知识点的标准解法。既然解法是标准的它就一定可以被拆成固定的做题步骤而固定步骤是可以提前练成本能的。这套方法陪我过了数据库期末考试也帮身边不少同学在同一门课上拿到了满意的分数。如果你能坚持做完两套模拟卷并按出错表整理考前基本可以睡个好觉而不是靠咖啡续命。希望帮到你。本文还有配套的精品资源点击获取