news 2026/10/12 9:56:06

数据库期末考试冲刺:范式、事务与SQL上机题避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据库期末考试冲刺:范式、事务与SQL上机题避坑指南

简介:面向数据库课程期末备考,一份 doc 文档收录了完整的一套数据库期末考试试题与参考答案,覆盖数据库系统核心、概念模型与关系模型、E-R 转换、关系规范化、SQL 授权、事务隔离与数据库恢复等高频考点。包内共 1 个 doc 文件,压缩包大小 118KB,内容组织为单选题、填空题等题型,适合高校学生考前自测、梳理知识框架及教师出题参考。目前已吸引 3787 人浏览学习。通过试做题目并对照解析,可快速定位薄弱环节,理解数据库原理中易混淆概念,如数据独立性、外联接、两段锁协议等。题目涉及实体主码判别、关系代数等价变换、T-SQL 授权语句、最小关系系统等典型考点,能够帮助复习者系统检查各章节掌握情况,是期末冲刺阶段实用的复习资料。

1. 数据库期末考试试题及答案:它到底该背什么、练什么

“数据库期末考试试题及答案”是每学期末被搜索次数最多的材料,但它也是坑最深的材料:网上随便下载的旧题库可能还停留在 SQL Server 2000 时代,和学校规定的 MySQL 5.7 / 8.0 语法对不上;答案里 GROUP BY 和 ORDER BY 的顺序甚至有明显错误。我带过不少学生做期末冲刺,结论比较一致:数据库期末考就两大块——笔试理论题(范式、事务、并发锁)和上机 SQL 题(建表、增删改查、多表查询)。前者靠理解加默写,后者靠双手敲 SQL。这份笔记不是让你背题,而是把一个学期塞成两张答题卡:题型怎么分布、标准答案长什么样、老师扣分最狠的在哪。适合期末前一到两周开始冲刺的人,也适合想用往年题型自测的从业者。

2. 出题套路拆解:理论题和 SQL 上机题的分数是怎么分布的

先说明一点:期末范围出来之前不要盲目刷网上打包的“全套题库”,那些题库往往包含大量超纲内容,比如分布式数据库、XML 数据库,考纲里根本没有。这里给出的出题逻辑来自主流教学大纲,具体到你的学校,以老师 PPT 和课后习题为准。

2.1 理论题:范式、事务、并发控制与索引

理论题一般占 50 分左右,题型有选择、判断、简答和综合设计。综合设计题最常考的是“给一个成绩表,要求拆到第三范式”,其次是事务隔离级别。先看一张考点热度表,复习优先级一目了然:

考点出题频率典型考法
范式(1NF-3NF/BCNF)高给表判定第几范式,或拆表到 3NF
事务 ACID高解释每个性质的含义
隔离级别与脏读/不可重复读/幻读中高填空/判断,选隔离级别
死锁与并发锁中死锁四个必要条件,悲观/乐观锁
索引中索引类型、为什么能加速、代价
视图与权限中低视图概念、不能用视图做什么

范式题的核心是函数依赖。判第几范式不要靠感觉,背这个顺序:第一范式要求属性不可再分;第二范式要求消除部分依赖,前提是主键必须是复合主键;第三范式要求消除传递依赖;BCNF 要求每个函数依赖的左边都是超键。考试扣分最多的地方是第二范式:部分学生一看到主键不是复合键就直接写“第三范式”,跳过了判断过程。哪怕结论对,没有推导过程也会被扣步骤分。

事务和并发是简答题的重灾区。记忆链条是:四种隔离级别从低到高,分别解决脏读、不可重复读、幻读。把它当成逻辑题去推,而不是死记。例如读未提交不解决脏读,读已提交解决脏读但不解决不可重复读,可重复读解决脏读和不可重复读但不一定解决幻读,串行化全部解决。卷面答案必须写“隔离级别越高,并发性能损失越大”,这句话几乎每年都有标准答案分。数据库死锁是另一类高频简答:四个必要条件互斥、占有并等待、不可抢占、循环等待,每条都要用自己的话解释,并配一个两事务互相等待的例子。

部分学校还会在理论题里考关系代数,占 5~10 分。常见考点是选择、投影、连接、除运算。如果老师 PPT 里讲了关系代数,至少要把选择 σ 和投影 π 的写法记住,并把“自然连接与等值连接的区别”作为简答准备。这个考点容易被忽略,但它属于“背了就能拿分”的送分题。复习理论题的正确姿势是:把范式判断、事务隔离、死锁、关系代数四块集中做 20 道真题,不要开着书做,合上书默写,错了再回去翻 PPT,效率比反复看课件高得多。

2.2 上机题:建表、数据库增删改查与多表查询的命题重点

上机题通常给 2~3 张表——最常见的是学生表 student、课程表 course、选课表 sc——要求完成建表、插入数据、单表查询、分组统计、多表连接、更新和删除。这部分占 40~50 分,是拉开差距的地方。好消息是基本盘特别稳定:就是数据库增删改查那四板斧。坏消息是,老师会把几个容易出错的点掺在同一个查询里,例如“对统计结果过滤”必须用 HAVING 而不用 WHERE,例如“求平均分大于 90 的课程”必须先在 SELECT 里对聚合结果起别名,再在 HAVING 里使用。

上机判分一般分三档。第一档看建表是否正确:主键、外键、非空、默认值、唯一约束各占分,少了约束扣 2~3 分,但表能建出来就有分。第二档看增删改查的数据结果:插入行数、更新行数、删除行数是否与标准答案一致,多一行少一行都算错。第三档看查询结果格式:列名有没有用别名、排序方向、是否去重,这三项经常成为“看起来对了但没分”的原因。我见过不少学生子查询写对了,但忘了在 COUNT(*) 后面加别名,被扣 2 分。机考环境下这种扣分很冤。

环境方面,大部分学校机房装的是 MySQL 5.7 或 8.0,少部分用 MariaDB 或 SQL Server。考前务必确认两件事:自增列写法是 AUTO_INCREMENT(MySQL)还是 IDENTITY(1,1)(SQL Server);一个表里能不能出现两个主键。不能。可以用复合主键,但不要在一个表里既写 PRIMARY KEY 自增单列,又写 PRIMARY KEY(sno, cno),这在语法上会直接报错。另一个常见问题是 char 和 varchar 混用:外键列和被引用列的类型长度不一致,导致插入外键值时匹配不上,整题连带丢分。上机考试时间紧,不要指望调试太久,按“先建表、再插数据、最后查询”的顺序一步一步来,每步跑通再往后走。

2.3 高热度但考不深的考点:视图、存储过程、触发器

每年都有一批学生拿着“数据库面试题”级别的资料复习,把存储过程、触发器、游标背得很熟,结果卷子上只出了一道选择题。方向对,但消耗太多时间。数据库期末考讲究性价比:视图要会“虚拟表、不存储数据”这六个字,触发器要会“事件触发自动执行”这六个字,存储过程知道“预编译 SQL 集合”就够了,不需要背完整的 CREATE PROCEDURE 语法。更值得投入时间的是复杂查询的最后一种考法——相关子查询,例如“找出没有选任何课的学生”,用 NOT EXISTS 比用 NOT IN 更稳,因为当子查询结果里包含 NULL 时,NOT IN 的行为会让你翻车。这个点后面避坑部分会单独展开。

还有一个容易被忽略的得分点是数据库安全性。考纲里通常有“用户权限”一节,要会 GRANT 和 REVOKE 的基本语法。常考语句是“把 student 表的查询权限授予用户 zhangsan,并允许他再授权给其他人”,答案写成:

GRANT SELECT ON student TO zhangsan WITH GRANT OPTION;

这一句值 5 分左右,属于背下来就能拿的分,不要在这种题上失手。

3. 可抄的标准答案模板:建表、查询、范式与事务题怎么写才能满分

这一章直接给模板。遇到同类型题,对照着改表名和列名就行。

3.1 建表题:主键、外键与约束的完整模板

期末建表题一般长这样:“建立学生表 student,包含学号 sno、姓名 sname、性别 sex、出生日期 sbirth,学号为主键;建立选课表 sc,包含学号 sno、课程号 cno、成绩 grade,主键为 (sno,cno),sno 和 cno 分别为外键”。标准答案如下:

CREATE TABLE student ( sno CHAR(10) PRIMARY KEY, sname VARCHAR(20) NOT NULL, sex CHAR(2) DEFAULT '男' CHECK (sex IN ('男', '女')), sbirth DATE ); CREATE TABLE sc ( sno CHAR(10), cno CHAR(6), grade DECIMAL(5, 2), PRIMARY KEY (sno, cno), FOREIGN KEY (sno) REFERENCES student(sno) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (cno) REFERENCES course(cno) ON DELETE RESTRICT );

有几个点需要交代。sno 用 CHAR(10) 而不是 INT,是因为学号不参与运算,可能包含前导零,字符型更符合业务语义。性别用 CHECK 约束,这是不少新版教材的考点。grade 用 DECIMAL(5,2) 而不是 FLOAT,因为浮点数存分数可能产生 89.999999 这样的值,判卷时如果数据库按精确值比对,选错数据类型就会扣分。外键删除策略:sc 引用 student 时写 ON DELETE CASCADE 表示学生删除时选课记录跟着删;sc 引用 course 时用 RESTRICT 表示课程被引用时不允许删除。标准答案不需要在表里额外建索引,但如果题目要求“按课程号建索引”,应写成单独的语句:

CREATE INDEX idx_sc_cno ON sc(cno);

写在建表语句内部反而可能触发语法错误。判断依据是:题目给了单列主键就是单列主键,给了“选课表 (学号, 课程号) 为主键”就是复合主键,不要自己加戏。

3.2 查询题:四类高频题的判卷要点

第一类,单表查询加排序:“查询所有姓张的学生,按学号降序排列”。标准答案:

SELECT * FROM student WHERE sname LIKE '张%' ORDER BY sno DESC;

注意 WHERE 在 GROUP BY 之前、ORDER BY 在最后。第二类,分组统计:“统计每个系的学生人数,只输出人数大于等于 2 的系”。标准答案:

SELECT sdept, COUNT(*) AS cnt FROM student GROUP BY sdept HAVING COUNT(*) >= 2;

GROUP BY 后面出现的列,SELECT 里只能出现分组列和聚合函数,这是分组题的判卷铁律。第三类,多表连接:“查所有选了课程的学生姓名和课程名”。标准答案:

SELECT s.sname, c.cname FROM student s JOIN sc ON s.sno = sc.sno JOIN course c ON sc.cno = c.cno;

别名 s、sc、c 能省很多字,也能避免 sno 在两个表里出现导致的列名歧义。第四类,子查询:“查没有选任何课的学生姓名”。标准答案:

SELECT sname FROM student s WHERE NOT EXISTS ( SELECT 1 FROM sc WHERE sc.sno = s.sno );

为什么用 NOT EXISTS 而不是 NOT IN,这是踩过坑才得出的结论:当 sc 表中某条记录的 sno 为 NULL,或子查询结果里混入 NULL 时,NOT IN 会返回“未知”而不是“真”,导致整个查询结果为空。NOT EXISTS 是相关子查询,逐行判断,不受 NULL 影响。判卷老师看这道题时,重点看关键字顺序和连接条件是否写对,只看结果的话无法区分这两种写法,但平时练习建议养成用 NOT EXISTS 的习惯。

查询题还有一个容易扣分的点是去重。题目问“有哪些学生选过课”,如果没写 DISTINCT,结果里会重复出现同一学生的多行记录。标准答案是:

SELECT DISTINCT sno FROM sc;

这题虽然简单,但每年都会有一批学生因为忘记去重被扣分,特别是机考环境里结果集行数对不上时,不要只检查 WHERE 条件,先看一眼是不是少了 DISTINCT。

3.3 范式判定题:三步走推演,过程比结论值钱

范式题的题干往往长这样:“学生关系模式 S(学号, 姓名, 系名, 系主任, 课程号, 成绩),已知学号→姓名,学号→系名,系名→系主任,(学号,课程号)→成绩。”第一步找主键:候选键是 (学号,课程号),所以主键就是它。第二步看部分依赖:姓名、系名、系主任都只依赖于学号,不依赖于课程号,所以存在部分依赖,当前最多只能算第一范式。把 S 拆成 S1(学号,姓名,系名,系主任) 和 S2(学号,课程号,成绩)。第三步看传递依赖:S1 里存在系名→系主任,且学号→系名,所以学号→系主任是传递依赖,S1 不是第三范式。继续拆 S3(学号,姓名,系名) 和 S4(系名,系主任)。

拆完后再验证:S3 主键学号,姓名、系名完全依赖于学号,且无传递依赖,满足第三范式;S2 主键(学号,课程号),成绩完全依赖于整个主键,也满足第三范式;S4 主键系名,满足第三范式。如果题目再问“能否达到 BCNF”,要额外检查每个函数依赖左边的属性是否包含候选键。S3 中学号→系名,学号是超键,所以 S3 同时也是 BCNF;S1 中系名→系主任,系名不是超键,所以 S1 不是 BCNF。卷面上的写法按“先判、后拆、再验”三段展开,每拆一次写一句“消除了部分依赖”或“消除了传递依赖”,步骤分才拿得稳。

这里要提醒一句:有些题会故意不给你函数依赖,只给一张表让你“判断并分解到 3NF”。这种情况下要先从业务语义里自己列出函数依赖,再开始判断。不要直接写结论,列出依赖本身就是得分点。

3.4 事务与并发题:隔离级别与数据库死锁的书面写法

简答题最经济的写法是“概念 + 场景 + 一句话评价”。比如“什么是脏读,如何解决”,标准答案写法:“事务 T1 修改了数据尚未提交,事务 T2 读取到该未提交数据,T1 回滚,T2 读到的数据即为脏数据。通过将隔离级别设为读已提交或以上解决。”

隔离级别是简答题的高频素材,这张表建议记下来:

隔离级别脏读不可重复读幻读
读未提交可能可能可能
读已提交解决可能可能
可重复读解决解决可能(MySQL InnoDB 默认级别下间隙锁基本解决)
串行化解决解决解决

考试写表时注意,MySQL 的 InnoDB 在可重复读级别下通过间隙锁基本解决了幻读,但教材层面仍算“可能”。如果题目特别限定 MySQL 8.0,可以补一句“在 MySQL 默认隔离级别下,幻读被间隙锁规避”。

数据库死锁的书面答案结构是“必要条件 + 简单例子”。四个必要条件一字不差:互斥、占有并等待、不可抢占、循环等待。例子写:事务 A 持有行 1 的锁并等待行 2,事务 B 持有行 2 的锁并等待行 1,双方都不释放已有锁,形成循环等待。解决办法写“按相同顺序加锁”或“引入锁超时机制”,不要写“杀掉一个进程”这种运维命令,判卷标准答案通常落在打破循环等待条件上。

4. 避坑:数据库 SQL 考试最常见的 4 个扣分点

以下扣分点来自历年上机考试和学生反馈,每一条都是“现象 → 原因 → 解决”的完整链条。

4.1 现象:HAVING 和 WHERE 写混导致分组统计结果不对

现象:在分组统计题里用 WHERE COUNT(*) >= 2 过滤组,MySQL 直接报语法错误;有些数据库虽然不报错,但统计结果明显不对。原因:WHERE 在分组之前对原始行过滤,此时聚合函数还没计算出来,WHERE 里根本不能用聚合函数;HAVING 在 GROUP BY 之后对分组结果过滤。解决:记住口诀“WHERE 过滤行,HAVING 过滤组”。先写 GROUP BY,再在它后面接 HAVING。对比一下正确和错误写法:

-- 错误 SELECT sdept, COUNT(*) FROM student WHERE COUNT(*) >= 2 GROUP BY sdept; -- 正确 SELECT sdept, COUNT(*) FROM student GROUP BY sdept HAVING COUNT(*) >= 2;

类似的坑还有把 WHERE 和 HAVING 同时用时顺序颠倒,正确顺序永远是 WHERE → GROUP BY → HAVING。

4.2 现象:外键约束导致插入数据一直失败

现象:向 sc 表插入一条选课记录,系统报“Cannot add or update a child row: a foreign key constraint fails”。原因:插入的外键值在父表中不存在,或者父表主键和子表外键的类型、长度不一致。最常见的是 student.sno 定义了 VARCHAR(10),而 sc.sno 定义了 CHAR(10),CHAR 会补空格,表面看起来都是“S001”,数据库判定并不相等。解决:建表前统一被引用列和引用列的类型和长度。插入数据按父表→子表的顺序:先插入 student,再插入 sc。如果机考题目硬要你先插入子表,可以临时执行 SET FOREIGN_KEY_CHECKS=0,但考试不推荐这样,稳妥做法是调整插入顺序。

4.3 现象:DELETE、DROP、TRUNCATE 概念混淆

现象:问“删除学生表所有数据,保留表结构,请写出 SQL”,答案写成了 DROP TABLE student。原因:没分清三类删除操作的本质,看到“删除”就只想到 DELETE。解决:整理成一组对比记。DELETE 是 DML,可以加 WHERE,删除部分或全部行,配合事务可以回滚;TRUNCATE 是 DDL,清空表数据但保留表结构,不能加 WHERE,不可回滚;DROP 是 DDL,把整张表包括结构一起删除,不可回滚。所以这题的正确答案是:

DELETE FROM student; -- 或者 TRUNCATE TABLE student;

期末选择题很喜欢考这个点,选项里混着 DELETE、DROP、TRUNCATE,判断标准就一条:题目里有没有说“保留表结构”。

4.4 现象:范式判定只看主键不看函数依赖

现象:判断一个表属于第几范式,一看到主键是学号,直接写“第三范式”,结果被扣分。原因:范式判定依据是函数依赖集合,主键只决定判断前提。属性完全依赖整个复合主键,并不代表没有传递依赖;只要存在“部门号→部门名”这类依赖,就还是第二范式。解决:凡判范式,即使题目没给函数依赖,也要先从业务语义整理出依赖集,再按“候选键 → 部分依赖 → 传递依赖”的顺序检查。写答案时把“存在部分依赖”或“存在传递依赖”这句判断写在前面,结论写在后面。这样即使结论和老师不一样,步骤分也能拿一半。

5. 考前一晚的验证方法:三张自测表把漏洞补上

最后这一章不讲新知识,讲怎么在考前一晚快速验证自己到底行不行。

5.1 第一张自测表:理论概念能不能脱口而出

准备一张白纸,列出以下问题逐个回答,答不出来的就是漏洞。第一范式到第三范式的定义,能不能各举一个例子;事务 ACID 四个性质分别解释;四种隔离级别分别解决什么问题;死锁的四个必要条件;索引为什么能加快查询,代价是什么。回答方式必须是“合上书,默写”,不是看着 PPT 读。我习惯让学生用五分钟完成这张表,写不出来的知识点直接翻 PPT 标记,第二天考前只看标记部分。这张表覆盖了理论题 80% 的简答和判断考点。

5.2 第二张自测表:SQL 能不能脱离提示默写

在没有任何帮助的情况下,手写下面六个操作:建一张带主键外键的表;往表里插三条数据;按条件查询并按某列排序;分组统计并用 HAVING 过滤;两表连接查指定列;更新一个字段的值。每写完一条,对照标准答案看关键字顺序。这里有个屡试不爽的验证技巧:在纸上画出 SELECT 的执行顺序——FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT,然后对照你的 SQL 检查。画得出来顺序,说明 SQL 的执行逻辑是真的懂了;画不出来,说明还在背模板,考试一旦换个表名就容易慌。

-- 自测用的最小 SQL 集合,逐条默写 CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t VALUES (1, 'a'), (2, 'b'); SELECT * FROM t WHERE name = 'a' ORDER BY id DESC; SELECT name, COUNT(*) FROM t GROUP BY name HAVING COUNT(*) > 0; UPDATE t SET name = 'c' WHERE id = 1;

能顺利写完这六条,上机题的 40 分基本保住了。剩下重点看多表连接和 NOT EXISTS 子查询,这两类题最容易在考场上卡住。

5.3 第三张自测表:错题本上还有几条没弄懂

把平时作业里的错题翻出来,不要只看正确答案,要看当时错在哪一步。最常见的错因集中在三处:HAVING 和 WHERE 混写、外键约束类型不一致、GROUP BY 少写列。针对每一类错题,找一道新题重做,确认不是背答案。我带过的学生里,分数高的往往不是刷题最多的,而是能把“执行顺序”和“书写顺序”默写清楚的。期末冲刺再做 100 道题,不如把 10 道典型题的错因改对。这个习惯从期末考一直带到面试都有效,毕竟数据库面试题问来问去,也离不开范式和 SQL 这两件事。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 9:49:23

免费搭建私人知识库:Cherry Studio + 免费模型实现RAG全流程

前阵子我用一套完全免费的组合,把堆积两年的PDF、Word、Markdown资料全部变成能随问随答的私人知识库。用到的核心就是Cherry Studio搭配各类免费模型,整个方案不花一分钱,却把付费知识库产品的主流程全走通了:文档导入、向量化、…

作者头像 李华
网站建设 2026/10/12 9:47:15

学生校园消费行为分析:一卡通流水聚类与数据清洗实战

简介:这是一份基于Python的学生校园消费行为分析项目源码,面向Python期末大作业、课程设计以及需要数据分析实战练习的高校学习者,也适合作为理解校园消费场景下行为建模的入门参考。项目以某高校校园消费行为数据集为对象,基于DF…

作者头像 李华
网站建设 2026/10/12 9:44:10

自组织映射SOM:无监督聚类与降维的Python实战指南

简介:这份资源提供完整的自组织映射(SOM)算法Python实现,面向机器学习初学者与需要聚类、降维及可视化实践的开发者。SOM作为经典无监督神经网络,可将高维数据映射到二维网格并保持拓扑结构,代码覆盖网络初…

作者头像 李华
网站建设 2026/10/12 9:42:11

Ridge-RF-LSBoost三模型融合:MATLAB时间序列预测实战

简介:一套基于MATLAB R2025b的Ridge-RF-LSBoost组合模型项目文档,面向具备MATLAB与机器学习基础、从事数据分析、智能预测或工程建模的研发人员、高校师生与技术工程师。内容聚焦电力负荷、可再生能源出力、金融时序、设备状态监测等复杂时间序列预测任务…

作者头像 李华
网站建设 2026/10/12 9:41:26

ChatGPT虚拟角色对话生成:从Prompt设计到剧情评估的实战指南

简介:这份研究文档系统探讨ChatGPT大语言模型在虚拟角色对话生成与情节开发中的实际应用与评估方法,面向游戏策划、虚拟现实开发者、影视编剧及对AI叙事感兴趣的入门与进阶读者。文档从ChatGPT的技术原理入手,解析其基于大规模对话数据预训练…

作者头像 李华