Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

参考:MySQL 与 SQL 基础

本文件原为阶段二周计划,现作为阶段三(后端进阶)参考素材保留,对应阶段三第 1 周。详细周计划确定后再正式改写。

学习目标

把数据从文件搬到数据库。完成后,应能够:

  • 安装并启动 MySQL,使用命令行或客户端连接数据库
  • 使用 DDL 创建数据库、数据表和约束
  • 使用 DML 完成插入、更新和删除
  • 使用 DQL 完成条件、排序、分页、聚合和分组查询
  • 完成内连接、左连接和子查询
  • 使用事务保证一组操作的完整性
  • 为学生信息管理系统设计出合理的表结构

学习资料与范围

  • 主课程:参考视频待定(MySQL 与 SQL)
  • 视频范围:待补充

确定课程后,把下面的知识模块映射到具体视频章节。

学习模块学习结果
MySQL 安装、服务启动与客户端连接能够连接并操作数据库
数据类型、DDL 建库建表与约束能够设计并创建数据表
insert、update、delete能够维护表中的数据
select、where、order by、limit能够完成基础查询
聚合函数、group by、having能够完成统计查询
多表查询与连接能够查询关联数据
子查询与常用函数能够完成较复杂的查询
事务与基础索引能够保证数据一致性并了解索引作用

需要掌握的知识点

数据库与表

  • 数据库、表、行、列的关系
  • MySQL 的登录、退出、查看数据库和切换数据库
  • 常用数据类型:int、bigint、varchar、char、date、datetime、decimal
  • 主键、自增、非空、唯一、默认值和外键约束
  • 使用 create table、alter table、drop table 管理表结构
  • 字符集和排序规则(建议统一使用 utf8mb4)

SQL 基础

  • insert 单行和多行插入
  • update 结合 where 精准修改,避免全表更新
  • delete 与 truncate 的区别
  • select 基本结构:字段、表名、条件、排序
  • where 中的比较、逻辑、范围、模糊和空值判断
  • order by 多字段排序和升降序
  • limit 分页写法与偏移量计算
  • 别名、去重和常用字符串、日期、数值函数

统计与多表查询

  • count、sum、avg、max、min
  • group by 分组和 having 过滤分组结果
  • where 与 having 的执行顺序差异
  • 内连接 inner join 与左连接 left join
  • 一对多关系下统计结果出现重复行的原因
  • 子查询:标量子查询、in 子查询、exists 子查询的基本用法
  • 联表查询与多次单表查询的选择依据

事务与索引

  • 事务的四个特性(原子性、一致性、隔离性、持久性)
  • start transaction、commit、rollback
  • 事务在转账、批量导入等场景中的作用
  • 索引的作用和基本创建方式
  • 主键索引与唯一索引
  • 索引不是越多越好的原因

必做练习

  1. 环境准备:启动 MySQL 服务,使用命令行创建数据库并以 utf8mb4 字符集建库。
  2. 建表:创建 student、course、score 三张表,为学号、课程编号设置唯一约束。
  3. 数据初始化:向三张表插入至少 10 名学生、3 门课程和 20 条成绩记录。
  4. 单表查询:查询全部学生、按年龄排序、只查询前 5 条、查询指定班级的学生。
  5. 条件查询:查询成绩在 60-80 分之间的记录、查询姓名包含“张”的学生、查询班级为空的学生。
  6. 更新与删除:修改指定学号学生的班级,删除一条指定成绩,并说明如何避免误操作全表。
  7. 聚合统计:统计学生总数、每门课程的平均分、最高分和最低分。
  8. 分组查询:按班级统计人数,并只显示人数大于 2 的班级。
  9. 多表查询:查询每名学生的姓名、课程名和成绩,并输出每名学生的总分。
  10. 子查询:查询平均分高于全体平均分的学生,查询没有成绩记录的学生。
  11. 分页查询:按总分降序,每页 5 条,输出第 1 页和第 2 页的结果。
  12. 事务验证:使用事务插入一组数据后回滚,验证数据未写入;再提交一次,验证数据已写入。

综合任务:设计学生信息管理系统数据库

为下一周的 JDBC 改造准备完整的数据库脚本和查询语句。

要求:

  • 输出完整的建库、建表 SQL 脚本,脚本可直接重复执行
  • 至少包含学生表、课程表、成绩表,并说明表之间的关系
  • 每张表都必须有主键,学号、课程编号等业务字段设置唯一约束
  • 成绩字段使用合适的数据类型,并限制合理取值范围
  • 提供初始化数据脚本,数据量足以支撑查询、分组和联表练习
  • 编写查询脚本,覆盖增删改查、条件查询、排序分页、分组统计和多表连接
  • 所有 SQL 语句添加注释,说明查询目的
  • 记录一次事务回滚实验的过程和结果
  • 整理表结构设计说明,逐个字段解释类型选择和约束原因

产出

  • MySQL 环境搭建与连接记录
  • 建库建表脚本和初始化数据脚本
  • 查询练习脚本及执行结果
  • 事务回滚实验记录
  • 数据库表结构设计说明
  • 一份常用 SQL 语句速查笔记

完成检查

  • 能够安装、启动并连接 MySQL
  • 能够使用合适的类型和约束设计数据表
  • 能够熟练编写增删改查语句
  • 能够使用排序、分页和条件查询
  • 能够使用聚合函数和分组完成统计
  • 能够完成多表连接和基础子查询
  • 能够使用事务提交或回滚一组操作
  • 已完成学生信息管理系统的数据库脚本和表结构说明