# Lab01 操作手册 ## 1. 实验目标 本实验完成两个数据库的 DDL 建立与验证: - `StudentCourse`:学生选课数据库,包含 `student`、`course`、`sc` - `SPJ`:经典供应商-零件-工程数据库,包含 `S`、`P`、`J`、`SPJ` 本次重点体现以下内容: - 建立数据库和基本表 - `ALTER TABLE` 修改表结构 - `CONSTRAINT` 完整性约束 - 索引的创建、修改与删除 - 基础数据装入与结果验证 ## 2. 截图精简原则 为便于后续 TeX 排版,本手册改为“每个关键实验步骤只保留 1 张代表图”的方式: - 不再追求每条 SQL 都单独截图 - 同一小节中的相关结果,能放在一屏就合并为一张图 - 报告里优先保留“建库建表完成、结构约束验证、数据验证”三类图片 - 全部截图控制在 8 张左右,便于后续每页排 1-2 张图 如果你已经拍了更多截图,写报告时只需要从中挑出最有代表性的几张即可,不必全部放进去。 ## 3. Docker 持久化说明 项目根目录中的 [docker-compose.yml](../../docker-compose.yml) 已将 MySQL 数据目录挂载到 Docker Volume `mysql_lab_data`。 - 不要执行 `docker compose down -v` - 不要手动删除 `mysql_lab_data` 这样 `StudentCourse` 和 `SPJ` 两个数据库会一直保留,后续 Lab02、Lab03 可以继续复用。 ## 4. 启动数据库容器 在项目根目录执行: ```bash docker compose up -d docker compose ps ``` 确认容器 `db-lab-mysql8` 状态为 `running` 或 `healthy`。 本步骤不需要截图。 ## 5. 在 DataGrip 中连接 MySQL 新建 MySQL 数据源,连接参数如下: - Host:`127.0.0.1` - Port:`3306` - User:`root` - Password:`123456` - Database:先留空 点击 `Test Connection`,确认连接成功后保存。 本步骤不需要截图。 ## 6. 执行方式说明 建议按 [Lab01/sql/lab1.sql](../sql/lab1.sql) 的大节分段执行: - 第 1-2 节:建立 `StudentCourse` 数据库和基本表 - 第 3-4 节:修改 `StudentCourse` 表结构并处理索引 - 第 5-6 节:插入并验证 `StudentCourse` 数据 - 第 7-8 节:建立 `SPJ` 数据库和基本表 - 第 9-10 节:插入并验证 `SPJ` 数据 这样截图时更容易按“实验步骤”保留代表性结果。 ## 7. 建立并验证 StudentCourse 先执行脚本中的第 1-6 节,然后按下面顺序检查。 ### 7.1 建库建表完成情况 执行: ```sql SHOW DATABASES LIKE 'StudentCourse'; USE StudentCourse; SHOW TABLES; ``` 请截图: - `shot01.png`:执行第 1-2 节成功后的控制台结果,并同时带出 DataGrip 左侧数据库树中已出现 `StudentCourse`、`SHOW TABLES;` 的结果 ### 7.2 表结构、约束与索引验证 执行: ```sql USE StudentCourse; SHOW COLUMNS FROM student; SHOW CREATE TABLE course; SHOW CREATE TABLE sc; SHOW INDEX FROM sc; ``` 请分别截图: - `shot02.png`:`student` 表字段结果,重点体现 `s_email` 已新增、`s_birthdate` 已修改 - `shot03.png`:`course` 表结构结果,重点体现唯一约束和先修课外键 - `shot04.png`:`sc` 表结构结果,重点体现联合主键、外键和检查约束 - `shot05.png`:`sc` 表索引结果,重点体现索引已更名为 `idx_sc_sno_cno` ### 7.3 基础数据与连接结果验证 执行: ```sql USE StudentCourse; SELECT * FROM student ORDER BY s_no; SELECT * FROM sc ORDER BY s_no, c_no; SELECT s.s_no AS 学号, s.s_name AS 姓名, c.c_name AS 课程名称, sc.semester AS 学期, sc.grade AS 成绩 FROM sc JOIN student AS s ON sc.s_no = s.s_no JOIN course AS c ON sc.c_no = c.c_no ORDER BY s.s_no, c.c_no; ``` 请分别截图: - `shot06.png`:`student` 表基础数据结果 - `shot07.png`:`sc` 表基础数据结果 - `shot08.png`:三表连接查询结果 ## 8. 建立并验证 SPJ 执行脚本中的第 7-10 节,然后按下面顺序检查。 ### 8.1 建库建表完成情况 执行: ```sql SHOW DATABASES LIKE 'SPJ'; USE SPJ; SHOW TABLES; ``` 请截图: - `shot09.png`:执行第 7-8 节成功后的控制台结果,并同时带出 DataGrip 左侧数据库树中已出现 `SPJ`、`SHOW TABLES;` 的结果 ### 8.2 结构约束与数据验证 执行: ```sql USE SPJ; SHOW CREATE TABLE P; SHOW CREATE TABLE SPJ; SELECT * FROM SPJ ORDER BY SNO, PNO, JNO; SELECT SPJ.SNO, S.SNAME, SPJ.PNO, P.PNAME, SPJ.JNO, J.JNAME, SPJ.QTY FROM SPJ JOIN S ON SPJ.SNO = S.SNO JOIN P ON SPJ.PNO = P.PNO JOIN J ON SPJ.JNO = J.JNO ORDER BY SPJ.SNO, SPJ.PNO, SPJ.JNO; ``` 请分别截图: - `shot10.png`:`P` 表结构结果,重点体现主键和检查约束 - `shot11.png`:`SPJ` 表结构结果,重点体现联合主键、三个外键和检查约束 - `shot12.png`:`SPJ` 基础数据结果 - `shot13.png`:四表关联验证结果 ## 9. 建议截图总数 本次 Lab01 建议保留 13 张截图。 这 13 张图已经可以完整覆盖: - `StudentCourse` 建库建表 - 表结构修改 - 约束与索引验证 - 基础数据装入 - 连接查询验证 - `SPJ` 建库建表 - `SPJ` 结构与数据验证 用于 LaTeX 报告会比 20 多张图更紧凑,也更容易排版。 ## 10. 完成后的存放位置 请将最终保留的截图放入: `Lab01/report/assets/shots/` 截图完成后,告诉我“Lab1 已执行完成,开始写报告”,我再继续写 LaTeX 报告。