资讯动态

数据库原理实验全链路指南:从环境搭建到SQL查询的避坑地图

发布时间:2026/10/27 11:52:59 来源:尧图企业网站定制
简介这份资源是郑州大学计算机与人工智能学院《数据库系统原理》课程的实验报告文档面向正在学习数据库课程、需要完成实验报告撰写或参考实验流程的高校学生。内容围绕万里数据库GreatSQL展开涵盖DBMS系统构架认识、数据库安装配置与启停管理、逻辑组件与物理组件理解以及虚拟机环境搭建、关闭SELinux和防火墙的原因分析、依赖包安装、二进制包下载解压等实践操作并强调实验截图编号、表格规范与结果分析反思的撰写要求。资源包共1个docx文件大小约3.69MB完整呈现实验目的、内容、类型、学时分配与实验过程记录可作为课程实验的对照范本与报告排版参考。目前已有509人学习适合需要梳理实验步骤、规范报告格式或搭建后续实验平台的读者借鉴。1. 数据库原理实验到底在练什么一张从装库到查询的地图很多人以为数据库实验就是敲几条 SQL 交差真正上手才发现卡住人的往往不是 SELECT而是装库那一步服务起不来、端口连不上、权限对不上一个环节翻车后面全白搭。这份实验报告把九个单项实验串成了一条完整链路——先认识 DBMS 并搭好运行环境再建库建表建索引然后进入交互式 SQL 的查询与更新最后落到视图、触发器、存储过程、约束这些逻辑组件和物理存储结构上。它适合正在系统学数据库原理、准备实验验收或期末复习的人你需要的不是零散命令而是一张能对上号的知识地图。梳理下来会发现整门课的主线其实只有三条——环境能不能跑起来、数据能不能按规则存进去、查询能不能按需求取出来其余都是围绕这三条做加法和排错。2. 环境搭建装库这一步的重点与坑位2.1 为什么先关 SELinux 和防火墙实验一的第一道门槛不是 SQL而是让数据库服务在虚拟机上正常跑起来。报告里明确要求先关闭 SELinux 和防火墙这不是随手一步而是有明确因果的配置决策。SELinux 是强制访问控制机制会限制进程的文件读写和网络通信权限而数据库启动时需要执行一些特权操作策略没放行就会导致服务异常防火墙则会阻塞数据库监听的端口外部连接直接失败。在虚拟机内做开发和测试的场景下关掉这两者能显著简化配置、减少出错面。# 临时关闭 SELinux立即生效重启失效 setenforce 0 # 永久关闭 SELinux改配置文件重启后仍生效 sed -i /^SELINUX/cSELINUXdisabled /etc/selinux/config # 关闭防火墙并禁止开机自启 systemctl disable firewalld systemctl stop firewalld这几条命令要理解着记setenforce 0只改运行时状态改配置文件才是持久化disable管开机自启stop管当前进程两条都要执行才算关干净。复习时最容易混的就是「临时」和「永久」这一对考试问「重启后为什么又生效了」答案就在这。2.2 依赖包与二进制安装的完整顺序装库的顺序是有讲究的跳步就会在启动阶段报错。报告给出的路径是装依赖包 → 下载解压二进制包 → 注册 systemd 服务 → 写全局配置 → 建系统用户和目录 → 启动验证。依赖包里libaio-devel、numactl系列关系到异步 IO 和内存分配openssl系列关系到连接加密缺了它们服务可能起得来但跑不稳。# 安装运行依赖 yum install -y pkg-config perl libaio-devel numactl-devel numactl-libs \ net-tools openssl openssl-devel jemalloc jemalloc-devel \ perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simple # 解压二进制包到安装目录 cd /usr/local tar xf GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal.tar.xz # 注册并重载 systemd 服务 vim /lib/systemd/system/greatsql.service systemctl daemon-reload # 创建专用系统用户禁止登录降低安全风险 /sbin/groupadd mysql /sbin/useradd -g mysql mysql -d /dev/null -s /sbin/nologin # 建数据目录并授权 mkdir /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql/ /var/log /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64-minimal这里的关键理解点为什么数据库要用独立的mysql用户而不是 root 跑因为数据库进程权限越大被攻破后的破坏面越大最小权限原则是运维常识。-s /sbin/nologin表示这个账号不能登录系统只用来跑服务。启动后用三条命令交叉验证缺一不可systemctl start greatsql # 启动服务 systemctl status greatsql # 看服务状态是否 active ps -ef | grep mysqld # 确认守护进程真的在 ss -lntp | grep mysqld # 确认端口在监听 ls /var/lib/mysql # 确认数据文件已生成status显示成功不代表进程健康ps看进程、ss看端口、ls看数据文件三层验证才叫「真的起来了」。这是排查启动类问题的标准动作血泪经验是只信status一条命令结果端口没监听还查半天。2.3 逻辑组件与物理组件怎么区分实验一还要求理解数据库系统的两层架构。逻辑组件是「你操作的对象」基本表实际存数据视图是虚表不落盘、本质是查询结果的动态映射触发器在增删改事件上自动执行、用于维护一致性存储过程是预编译的 SQL 集合、提高复用减少传输约束是数据规则主键、外键、唯一、非空。物理组件是「引擎内部怎么干活」连接池、SQL 接口、解析器、优化器、可插拔存储引擎、日志文件。物理存储的基本单位是数据页数据以页为单位组织、以文件形式落盘。组件类型是否实际存数据典型用途基本表逻辑是数据存储的基础单位视图逻辑否虚表简化复杂查询、限制行列访问触发器逻辑否事件驱动维护一致性存储过程逻辑否封装复杂操作、减少网络传输约束逻辑否保证数据完整性数据页物理是存储单位磁盘与内存间的基本读写单元这张表是复习时的锚点判断一个对象「是不是表」看它落不落盘判断一个操作「贵不贵」看它动的是逻辑层还是物理页。3. 建库建表建索引DDL 的规范与易错细节3.1 从建库到建表的完整语句链实验二的核心是把「数据库—表—索引」三级对象用 SQL 建出来。建库用CREATE DATABASE DB;随后SHOW DATABASES;确认、USE DB;切换。建表时报告先建了简化版验证语法再按教材属性建正式版这个「先跑通再规范」的顺序值得学。正式建表语句里几个设计点要盯住CREATE TABLE STUDENTS( Sno char(9) PRIMARY KEY, -- 学号做主键定长更省空间 Sname char(10) NOT NULL, -- 姓名非空 Sex char(2), Birthday DATE, Speciality char(20), Dno char(4) ); CREATE TABLE SC( Sno char(9), Cno char(5), Grade int, PRIMARY KEY (Sno, Cno) -- 复合主键一个学生一门课唯一 );SC表用(Sno, Cno)复合主键是因为成绩的本质是「学生 课程」这个组合的唯一记录单列做主键会允许重复选课记录。char与varchar的选择也是考点定长字段用char查询更快但可能浪费空间变长用varchar省空间但有额外开销。删除表时报告用了DROP TABLE ... CASCADE级联删除会连带删掉依赖对象复习时要能说清它和外键约束的联动关系。3.2 索引的创建、唯一性与删除索引部分报告建了两类普通索引CREATE INDEX Student_Dept ON Students (Dno);和唯一索引CREATE UNIQUE INDEX Course_Cno ON Courses (Cno);。区别在于唯一索引强制列值不重复普通索引只加速查找。删除索引用DROP INDEX Course_Cno ON Courses;注意要带表名因为索引名在部分数据库里是表级命名空间。-- 普通索引加速按系号查询 CREATE INDEX Student_Dept ON Students (Dno); -- 唯一索引既加速又保证课程号唯一 CREATE UNIQUE INDEX Course_Cno ON Courses (Cno); -- 删除索引需指定所属表 DROP INDEX Course_Cno ON Courses;重点理解主键本身自带唯一索引再对主键列建唯一索引是重复劳动索引不是越多越好每个索引都会拖慢写入并占空间这是后面性能分析的伏笔。3.3 数据填充与外键的添加时机实验三先建了院系、教师、学生、课程、选课、授课六张表并插入数据然后才用ALTER TABLE补外键。这个顺序很关键先插数据再加外键可以避免插入顺序受约束限制但如果数据本身违反引用完整性加外键就会失败。报告里对SC表直接在建表时写了FOREIGN KEY对teaches、students、teachers则用ALTER TABLE ... ADD FOREIGN KEY后补两种方式都要会。ALTER TABLE teaches ADD FOREIGN KEY (Cno) REFERENCES Courses(Cno); ALTER TABLE teaches ADD FOREIGN KEY (Tno) REFERENCES teachers(Tno); ALTER TABLE students ADD FOREIGN KEY (Dno) REFERENCES departments(Dno); ALTER TABLE teachers ADD FOREIGN KEY (Dno) REFERENCES departments(Dno);外键的复习要点是「引用方向」子表的外键指向父表的主键删除父表数据前要先处理子表引用否则报错。这也是为什么建表顺序通常先父后子、删表顺序反过来。4. 交互式 SQL查询与更新的复习重点4.1 查询的四类写法与执行顺序实验三把查询按「不带 WHERE」「带 WHERE」「IN 表达式」等层次铺开这个分类本身就是复习框架。不带条件的SELECT * FROM Courses;是全表扫描带条件的查询靠 WHERE 过滤BETWEEN ... AND ...处理区间IN处理枚举集合NOT IN取反。报告里还出现了用函数从日期算年龄的写法-- 用当前年份减出生年份估算年龄 SELECT sname, 2024 - YEAR(Birthday) AS Age FROM students; -- 区间查询出生年份在 1997 到 1999 之间 SELECT Sname, Speciality FROM students WHERE YEAR(Birthday) BETWEEN 1997 AND 1999; -- 集合查询专业属于计算机或软件工程 SELECT Sno, Sname FROM Students WHERE Speciality IN (计算机, 软件工程);这里有个容易忽略的点YEAR(Birthday)是对列做函数运算会导致该列上的索引失效数据量大时性能会掉。复习时要把「WHERE 里对列做函数」列为性能易错点。另外NOT BETWEEN和NOT IN在遇到 NULL 值时行为特殊NOT IN的子查询里若有 NULL整个条件可能返回空结果这是 SQL 三值逻辑的经典坑。4.2 更新操作与标准 SQL 的差异更新部分覆盖插入、修改、删除三类。插入要注意列顺序与值顺序一一对应多行插入用逗号分隔修改用UPDATE ... SET ... WHERE ...漏写 WHERE 会更新全表这是最危险的操作之一删除用DELETE FROM ... WHERE ...同样漏 WHERE 会清空表。报告特别提示要对比标准 SQL 与具体 DBMS 的语法差异比如日期字面量写法、函数名、CASCADE的支持程度这些差异在换库迁移时最容易翻车。提示执行 UPDATE 和 DELETE 前先用同条件的 SELECT 验证影响行数确认无误再改这个习惯能省掉很多后悔药。4.3 多表连接与聚合的复习抓手虽然报告正文以单表查询为主但六张表的结构已经为多表查询铺好了路学生表连选课表拿成绩、选课表连课程表拿课名、教师表连授课表拿授课关系。复习时要把「连接条件写在哪」「聚合函数和 GROUP BY 的配合」「HAVING 与 WHERE 的区别」这三件事串起来WHERE 在分组前过滤行HAVING 在分组后过滤组聚合函数不能出现在 WHERE 里。这几条是考试和实验验收的高频追问点。5. 易错点清单这些地方最容易翻车5.1 易错点一服务「启动成功」但连不上易漏点 → 为什么漏只看systemctl status显示 active 就以为万事大吉忽略了端口监听和数据目录权限。怎么补固定用ps、ss、ls三条命令交叉验证端口没监听先查配置文件和防火墙数据目录为空先查初始化和权限。5.2 易错点二建表时数据类型与长度拍脑袋易漏点 → 为什么漏char(9)和char(10)差一位插入超长数据会被截断或报错复习时只记语法不记长度约束。怎么补建表前先列出每个字段的取值范围定长字段算准长度变长字段留余量插入测试数据验证边界。5.3 易错点三外键添加顺序与数据冲突易漏点 → 为什么漏先加外键再插数据或子表数据引用了父表不存在的值导致ALTER TABLE失败。怎么补先保证父表数据齐全再加外键加之前用查询核对子表外键值是否都能在父表找到。5.4 易错点四UPDATE/DELETE 漏写 WHERE易漏点 → 为什么漏手快直接执行全表被改或清空。怎么补养成「先 SELECT 同条件看行数再执行写操作」的两步习惯重要操作前备份。5.5 易错点五混淆视图与基本表易漏点 → 为什么漏以为视图也存数据或对视图做更新时不清楚限制。怎么补记住视图是查询结果的动态映射、不落盘更新视图最终作用到基表且受可更新性限制复习时把「视图能不能更新」作为自测题。6. 复习落地一份可执行的查漏补缺清单复习这门课最有效的方式不是重读报告而是按「能不能独立复现」来验收。下面这份清单按实验链路排列每一项都对应一个可操作的自测动作做完打勾卡住的就回去补对应章节。模块自测动作通过标准环境配置不看笔记关 SELinux 和防火墙能说清临时与永久的区别安装部署口述装库六步顺序能解释每步缺了会怎样服务验证用三条命令确认服务健康能区分 status 与真实监听建库建表手写 STUDENTS、SC 建表语句主键、非空、类型都正确索引建普通索引和唯一索引各一个说清两者区别与代价外键用 ALTER 补两个外键说清引用方向与顺序查询写区间、集合、取反三类查询注意 NULL 与函数失效更新写带条件的 UPDATE 和 DELETE先 SELECT 验证再执行逻辑组件区分表、视图、触发器、存储过程判断是否落盘物理组件说出存储单位与落盘形式数据页、文件清单之外再补一个具体技巧把每个实验的「问题及总结」当成错题本用。报告里记录的「命令行界面不习惯、自己找图形化安装方法」这类看似琐碎的记录恰恰是复习时最容易被跳过、又最能暴露理解缺口的地方——能复现当时怎么解决的才算真会。我自己的习惯是每做完一个实验强制用三句话写复盘哪一步卡住、根因是什么、下次怎么提前避免。从那以后我每次碰新环境都强制先跑一遍「服务状态—进程—端口—数据文件」四连查再往下走省下的排查时间远比写这几行多。希望这份梳理能帮到你把散落的命令收成一张能随时调用的地图。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑