简介:这份中南大学数据库试题资料面向高校数据库课程学习者与备考学生,系统梳理了数据库原理的核心考点与典型题型。内容覆盖DBMS基础、数据模型、关系模型、SQL语言、数据库保护及设计理论等模块,并配有选择题、填空题、术语解释与简答题等多种题型,可帮助读者检验知识掌握程度、查漏补缺。资源包内含1个doc文档,压缩包约164KB,文档以复习总纲与试卷形式组织,按章节列出重点概念与常见考题,便于对照教材逐章复习。目前已有351人学习下载,适合需要系统梳理数据库知识体系、准备课程考试或考研复试的读者参考使用。
1. 数据库期末复习的“靶向资料”:中南大学数据库试题到底覆盖了什么
如果你正在为数据库期末考试发愁,或者带学生做数据库课程设计时想找一套有答案、有解析、能直接对标的题库,这份中南大学数据库试题算是比较“硬”的一份资料。它不是那种只有选择题的碎片化题库,而是从 CH1 概述一路铺到 CH7 数据库应用设计,覆盖了 DBMS 引入背景、三级模式两级映象、ER 模型、关系代数、SQL 的 DDL 与 DML 区分、索引与约束的关系、事务 ACID、并发控制的可串行化调度、函数依赖与 1NF/2NF/3NF 转化、六步设计流程这些核心考点。试卷部分还配了参考答案,应用题和 SQL 书写题都有完整语句,适合拿来当复习总纲或者出卷参考。适合谁?期末冲刺的本科生、需要快速梳理知识框架的考研党、以及刚讲完数据库原理想找配套练习的青年教师。下面我按“资料结构怎么拆 → 核心考点怎么过 → SQL 和关系代数怎么练 → 避坑 → 进阶验证”这条线,把这份试题的用法讲透。
2. 拆解试题结构:从 CH1 到 CH7 的知识点映射与复习优先级
2.1 七章总纲的权重分布与复习顺序
这份资料最值钱的地方,是开头那份“数据库复习总纲”。它把七章内容按考试出现频率和难度做了隐性分层。CH1 概述和 CH2 ER 模型属于概念题高发区,选择题、填空题、术语解释都会从这里出;CH3 关系模型和 CH4 SQL 语言是应用题和 SQL 书写题的主战场,分值占比通常超过 40%;CH5 数据库保护、CH6 关系数据库设计理论、CH7 应用设计则集中在简答题和综合题。我一般建议的复习顺序是:先过 CH1 和 CH2 把术语和模型概念钉死,再攻 CH3 关系代数和 CH4 SQL,最后用 CH5 到 CH7 收口简答和设计题。这样安排的原因是,关系代数和 SQL 的很多题目依赖 ER 模型和关系模型的基础,如果一上来就刷 SQL,遇到“求选修了全部课程的学生”这种除法或双重 NOT EXISTS 题,很容易卡住。
总纲里每个章节后面都标了“重点”或“作业”,比如 CH2 的键约束和作业、CH3 的关系代数作业、CH4 的索引与 UNIQUE/PRIMARY 约束关系。这些标记不是随便写的,它们对应试卷里反复出现的题型。以 CH4 为例,索引部分明确要求区分聚簇索引和非聚簇索引,并且要理清它们与 UNIQUE(候选键)和 PRIMARY(主键)约束的关系。这个点在试卷(1)第六题第 3 小题直接考了:建立 teacher 表按编号的索引,答案里写了Create index teach on teacher(bh);并补充了唯一索引和聚簇索引的写法。如果你复习时只背了 CREATE INDEX 语法,没理解聚簇索引的物理顺序含义,遇到“索引项的顺序与表中记录的物理顺序一致”这种选择题就会丢分。
2.2 试卷题型与分值结构:选择题、填空题、术语解释、简答、应用题、SQL 书写
资料里包含多套试卷,题型结构比较稳定。以试卷(1)为例:单项选择题 15 分、填空题 15 分、术语解释 15 分、简答题 15 分、应用题 15 分、SQL 书写 10 分、综合题 15 分。这个分值分布透露了一个关键信息:纯记忆性内容(选择、填空、术语、简答)占了 60 分,应用和 SQL 占 40 分。也就是说,如果你时间紧,先把术语解释和简答题的答案背熟,性价比最高。术语解释常考的有:数据库系统、内模式、封锁、第三范式、候选码、DBMS、数据完整性、数据模型、实体、非主属性。简答题高频题包括:数据库系统特点、实体完整性规则、关系模式设计不好的问题、数据库设计步骤、事务属性、三级封锁协议、等值连接与自然连接区别、需求分析阶段任务和方法。
填空题里反复出现的是:三大传统数据模型中具有严格数学理论基础的是关系模型、实现概念模型最常用的表示方法是 E-R 图、DBMS 并发控制的单位是事务、数据库恢复涉及数据转储和登记日志文件、关系代数中专门的关系运算包括选择投影连接和除法、事务四个性质是原子性一致性隔离性持久性、授权用 GRANT 收权用 REVOKE。这些空几乎每年都换汤不换药,把答案直接记住就能拿分。
2.3 从试卷反推考点:哪些章节必须动手写 SQL
试卷(1)的第六题和第七题、试卷(2)的第六题、试卷(3)的第四题、试卷(4)的第四题,都是 SQL 书写。这些题目覆盖了 CREATE TABLE、ALTER TABLE ADD COLUMN、CREATE INDEX、CREATE VIEW、DROP TABLE、INSERT、UPDATE、SELECT 嵌套、GROUP BY HAVING、BETWEEN、LIKE、IN、NOT EXISTS 双重否定。其中最难的是“查询选修了全部课程的学生学号和姓名”,试卷(1)第七题第 6 小题和试卷(2)第五题第 4 小题都考了。答案用的是双重 NOT EXISTS,逻辑是:不存在一门课程,该学生没有选修。这个题如果只背 SQL 模板不理解相关子查询的嵌套逻辑,考场上很难写对。
我的建议是,把资料里所有 SQL 题抄到自己的数据库环境里跑一遍。用 SQLite 或者 MySQL 建三张表:学生(学号,姓名,性别,年龄,所在系)、课程(课程号,课程名,先行课)、选课(学号,课程号,成绩)。然后逐题执行,观察结果。比如“查询其他系中比经管系所有学生年龄都大的学生名单”,答案写的是Select * From 学生 Where 年龄>=(select max(年龄) from 学生 where 所在系='经管系');这里用>=配合max是可行的,但要注意如果经管系没有学生,子查询返回 NULL,整个条件会变成未知,查不出任何记录。这种边界情况在考试里一般不考,但实际写代码时必须考虑。
3. 关系代数与 SQL 双线突破:从集合运算到嵌套查询的动手路径
3.1 关系代数五个基本运算与除法的手工推导
CH3 关系模型里明确标了“关系代数(重点)”,并且列出了传统的集合运算(交、并、差、笛卡儿乘积)和专门的集合运算(选择、投影、连接、除法)。试卷(1)选择题第 11 题考了“五种基本关系代数运算是”,答案是 ∪、-、×、π 和 σ。注意这里没有把 ∩ 和连接算作基本运算,因为交可以用差来表示,连接可以用笛卡儿积加选择来表示。这个点容易混,复习时要记死:基本运算是并、差、笛卡儿积、选择、投影。
除法运算在试卷里以“求选修了全部课程的学生”这种形式出现。关系代数除法的手工推导步骤是:先找出被除关系中所有课程号,再找出每个学生选修的课程号集合,如果某个学生的课程号集合包含全部课程号,则该学生是结果。用 SQL 写就是双重 NOT EXISTS。我一般会让学生先用关系代数表达式写一遍,再翻译成 SQL,这样能真正理解嵌套逻辑。比如“求选修了学号为 95001 学生所学过的所有课程的学生学号和姓名”,关系代数思路是:先取 95001 选修的课程集合,然后找选修了这些课程全部的学生。SQL 写法可以用 NOT EXISTS 嵌套,也可以用 GROUP BY 加 HAVING COUNT 来近似,但后者在课程集合不固定时容易出错。
3.2 SQL 书写题的分层练习:建表、索引、视图、嵌套查询
资料里的 SQL 题可以分成四个难度层。第一层是 DDL:CREATE TABLE、ALTER TABLE ADD COLUMN、CREATE INDEX、CREATE VIEW、DROP TABLE。试卷(1)第六题就是典型,建 teacher 表、加 WCF 列、建索引、建视图、删表。第二层是单表查询:BETWEEN、LIKE、IN、ORDER BY。第三层是多表连接和分组:JOIN、GROUP BY、HAVING COUNT。第四层是嵌套查询和双重否定:NOT EXISTS 嵌套、IN 嵌套。
我建议按这个顺序练,每层写完后对照答案检查语法细节。比如建表时主码用PRIMARY KEY,唯一约束用UNIQUE,外码用FOREIGN KEY ... REFERENCES ...。索引部分要注意CREATE UNIQUE INDEX和CREATE CLUSTERED INDEX的区别,聚簇索引会改变记录的物理存储顺序,一个表只能有一个聚簇索引。视图部分要注意WITH CHECK OPTION的作用,试卷(4)填空题第 4 题考了“为了使通过视图插入新行时,元组满足视图的定义条件,在定义视图时必须加上 WITH CHECK OPTION 子句”。这个点很多学生复习时忽略,考试时填空写不出来。
下面给一个可复现的建表和查询脚本,用 SQLite 语法,可以直接在 DB Browser for SQLite 里跑:
-- 创建学生表,学号为主键且唯一 CREATE TABLE Student ( Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15), PRIMARY KEY (Sno) ); -- 创建课程表 CREATE TABLE Course ( Cno CHAR(5) PRIMARY KEY, Cname CHAR(30), Cpno CHAR(5), Ccredit INT ); -- 创建选课表,外键关联学生和课程 CREATE TABLE SC ( Sno CHAR(5), Cno CHAR(5), Grade INT, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ); -- 查询选修了全部课程的学生学号和姓名(双重 NOT EXISTS) SELECT Sno, Sname FROM Student WHERE NOT EXISTS ( SELECT * FROM Course WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno ) );这段代码的关键在双重 NOT EXISTS 的语义:外层对每个学生,检查是否存在一门课程,该学生没有选修。如果不存在这样的课程,说明该学生选修了全部课程。注意内层子查询的关联条件SC.Sno = Student.Sno AND SC.Cno = Course.Cno必须写对,否则会变成笛卡儿积,结果全错。参数方面,CHAR(5)和CHAR(20)是定长字符串,实际用 VARCHAR 更灵活,但考试里按题目要求写就行。
3.3 索引与约束的联动:聚簇索引、唯一索引与主键的关系
CH4 明确要求理清索引与 UNIQUE、PRIMARY 约束的关系。这里有一个容易翻车的点:主键约束会自动创建一个唯一索引,但唯一索引不等于主键。唯一索引允许一个 NULL 值(取决于 DBMS),而主键不允许 NULL。聚簇索引决定数据的物理存储顺序,非聚簇索引只存储索引键和指向数据行的指针。试卷(1)第六题第 3 小题要求建索引,答案写了Create index teach on teacher(bh);并补充了唯一索引和聚簇索引的写法。考试时如果题目只说“建立按编号的索引”,写普通索引即可;如果题目说“建立唯一索引”或“聚簇索引”,必须加上 UNIQUE 或 CLUSTERED 关键字。
我在实际建索引时一般会先看查询模式:如果经常按范围查,用聚簇索引;如果经常按等值查且列值唯一,用唯一索引。但考试里不用想这么多,按题目字面要求写就行。注意 SQL Server 里聚簇索引的语法是CREATE CLUSTERED INDEX,MySQL 里聚簇索引通常由主键隐式创建,InnoDB 的主键索引就是聚簇索引。这些差异在考试里一般不涉及,但如果你在课程设计里用 MySQL,建表时指定主键就自动有了聚簇索引,不用再手动建。
4. 避坑与排查:数据库试题里最容易丢分的五个细节
4.1 三级模式与两级映象的对应关系写反
现象:选择题问“数据库系统的体系结构是”,选项里有“三级模式结构和一级映象”“三级模式结构和两级映象”“三级模式结构和三级映象”。很多人选错,写成一级或三级映象。原因:没记住三级模式(模式、外模式、内模式)之间只有两级映象——外模式/模式映象、模式/内模式映象。解决:记死“三级模式,两级映象”,外模式对应视图,模式对应基本表,内模式对应物理存储。物理独立性靠模式/内模式映象,逻辑独立性靠外模式/模式映象。
4.2 视图上不能定义新的基本表
现象:选择题问“在视图上不能完成的操作是”,选项有“在视图上定义新的视图”“查询操作”“更新视图”“在视图上定义新的基本表”。正确答案是“在视图上定义新的基本表”。原因:视图是虚表,不存储数据,只能在视图上再建视图,不能建基本表。解决:记住视图的三个可操作:查询、更新(有条件)、定义新视图。不能建基本表,不能建索引。
4.3 并发操作带来的问题混淆:丢失更新、不可重复读、读脏数据
现象:选择题问“数据库的并发操作有可能带来的三个问题中包括”,选项有“数据独立性降低”“无法读出数据”“权限控制”“丢失更新”。正确答案是丢失更新。原因:并发操作三大问题是丢失更新、不可重复读、读脏数据,不包括数据独立性降低和权限控制。解决:把这三个问题和事务隔离级别对应起来记——读未提交对应读脏数据,读已提交对应不可重复读,可重复读对应幻读,串行化全解决。
4.4 关系代数基本运算与专门运算的边界
现象:选择题问“五种基本关系代数运算是”,选项里有带 ∩ 和连接符号的。正确答案是 ∪、-、×、π 和 σ。原因:交和连接不是基本运算,交可以用差表示,连接可以用笛卡儿积加选择表示。解决:记死五个基本运算,其他都是导出运算。专门的关系运算包括选择、投影、连接、除法,其中选择和投影是基本运算,连接和除法是导出运算。
4.5 SQL 中空值判断不能用 = NULL
现象:选择题问“SQL 中涉及空值的操作不正确的是”,选项有AGE IS NULL、AGE IS NOT NULL、AGE = NULL、NOT (AGE IS NULL)。正确答案是AGE = NULL。原因:NULL 表示未知,任何值与 NULL 用 = 比较都返回未知,必须用 IS NULL 或 IS NOT NULL。解决:写 SQL 时遇到空值判断,一律用 IS NULL,不要用 = NULL。这个坑在实际开发中也经常踩,比如WHERE column = NULL永远查不出记录。
5. 进阶验证:用真题反推知识盲区与课程设计落地
5.1 用错题反查章节:建立个人薄弱点映射表
做完几套试卷后,不要只看分数,要把错题按章节归类。比如选择题错在 CH1 三级模式,填空题错在 CH5 事务 ACID,SQL 题错在双重 NOT EXISTS。然后回到总纲里对应章节,把相关概念重新过一遍。我一般会让学生做一张表,左边写错题编号,中间写对应章节,右边写错误原因和正确思路。这样复习两轮后,薄弱章节会非常清晰。比如“求选修了全部课程的学生”这种题,如果第一次写错,说明关系代数除法没理解透,需要回去看 CH3 的除法运算和 CH4 的嵌套查询。
5.2 把试题里的 SQL 题改造成课程设计的小模块
如果你正在做数据库课程设计,这份试题里的 SQL 题可以直接改造成功能模块。比如学生表、课程表、选课表这三张表,就是教务管理系统的核心。你可以把试题里的查询改写成带参数的存储过程或后端接口。比如“查询年龄在 18 到 22 之间的学生”可以做成一个筛选接口,“查询选修了 5 门以上课程的学生学号”可以做成统计报表。这样既练了 SQL,又推进了课程设计。注意在实际系统中,学号一般用 VARCHAR 而不是 CHAR,成绩用 DECIMAL 而不是 INT,这些细节可以根据需求调整。
5.3 验证方法:用 EXPLAIN 看查询计划,确认索引是否生效
在真实数据库里跑试题 SQL 时,可以用 EXPLAIN 命令查看查询计划,确认索引是否被使用。比如EXPLAIN SELECT * FROM Student WHERE Sage BETWEEN 18 AND 22;如果 Sage 列上有索引,查询计划会显示索引扫描;如果没有,会显示全表扫描。这个技巧在考试里不考,但在课程设计答辩时能加分。我一般会建议学生在建完索引后,用 EXPLAIN 对比建索引前后的查询计划,观察 type 列从 ALL 变成 ref 或 range。这样能真正理解索引的作用,而不是死记“索引提高查询速度”。
5.4 一个具体技巧:用 WITH CHECK OPTION 保护视图插入
试卷(4)填空题第 4 题考了 WITH CHECK OPTION。这个子句的作用是:通过视图插入或更新数据时,必须满足视图定义中的 WHERE 条件,否则拒绝操作。比如定义一个视图CREATE VIEW BMV AS SELECT XM, JBGZ, SFGZ FROM teacher WHERE bm='经管系' WITH CHECK OPTION;然后尝试插入一个 bm='金融系' 的记录,会被拒绝。这个技巧在实际开发中很有用,可以防止通过视图插入不符合条件的数据。考试里如果考视图定义,记得加上这个子句,尤其是题目提到“插入新行时元组满足视图定义条件”时。
从那以后我每次带学生复习数据库,都强制他们先把总纲里的七章知识点抄一遍,再用试卷里的 SQL 题在真实数据库里跑一遍,最后用 EXPLAIN 验证索引。这套流程走下来,期末考试的应用题和 SQL 书写题基本不会丢分。希望帮到你。
本文还有配套的精品资源,点击获取