news 2026/10/12 1:07:30

MySQL数据库基础实例教程:从安装到增删改查的完整教学大纲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL数据库基础实例教程:从安装到增删改查的完整教学大纲

简介:这份《MySQL数据库基础实例教程(第2版)》教学大纲PDF,面向软件技术、移动互联等专业的学生与授课教师,也适合自学者规划学习路径。它系统梳理了64学时(讲授与课内实践各32学时)的课程框架,涵盖数据库基础知识、数据库设计、数据定义、数据操作、数据查询、视图、索引与分区、数据库编程及数据安全等模块,并以PetStore数据库贯穿实例练习,兼顾E-R图设计、范式理论、完整性约束、存储过程与触发器等知识点,同时强调职业素质与动手能力培养。资源包共1个PDF文件,约341KB,内容为完整教学大纲,便于快速了解课程性质、教学目标与各章节教学要求。目前已有2127人学习下载,适合需要备课、制定教学计划或按大纲自学MySQL的读者参考。

1. 从一份教学大纲说起:MySQL 基础到底该练哪些实例

很多人搜「MySQL数据库基础实例教程(第2版)教学大纲.pdf」,表面是在找一份 PDF,实际诉求往往更具体:要么是老师要排一学期的课,要么是自学者想照着大纲把 MySQL 从安装到增删改查走一遍,要么是培训讲师想找一份能直接落地的实例清单。我见过太多人把大纲下载下来就吃灰,因为大纲只给了章节名,没给「每章对应哪个实例、实例跑在什么环境、参数怎么设」。这份大纲的价值不在 PDF 本身,而在于它把 MySQL 基础拆成了可执行的模块:环境搭建、库表操作、数据增删改查、排序与分页、事务与锁、存储过程、连接池。这篇笔记就按这个顺序,把每个模块的最小实例、必调参数和翻车点讲清楚,让你拿到大纲就能直接排课或自学。

2. 环境搭建:Windows 10 与 Linux 下把 MySQL 跑起来的最小实例

大纲第一章通常是「数据库环境与工具」,但真正卡住新手的是安装。热搜里「mysql安装教程8.0」「mysql在windows10上怎么安装」「rpm安装mysql」「docker安装mysql失败」全是高频问题。我一般建议教学环境统一用 MySQL 8.0,因为 5.7 已经停止官方维护,而 8.0 的默认字符集、认证插件、窗口函数都更贴近现代用法。下面分 Windows 和 Linux 两条路径给最小命令。

2.1 Windows 10 上用 ZIP 包安装 MySQL 8.0

不推荐用 exe 安装器,因为教学机上经常缺 VC++ 运行库,装到一半报错。ZIP 包解压即用,适合批量部署。

# 1. 解压到 D:\mysql-8.0,进入 bin 目录 cd /d D:\mysql-8.0\bin # 2. 初始化数据目录,生成临时 root 密码 mysqld --initialize --console # 输出里有一行 [Note] A temporary password is generated for root@localhost: xxxxx # 记下这个密码,后面要改 # 3. 注册为 Windows 服务 mysqld --install MySQL80 --defaults-file=D:\mysql-8.0\my.ini # 4. 启动服务 net start MySQL80 # 5. 登录并改密码 mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

逻辑说明:--initialize会创建 data 目录并生成临时密码,--console让日志打到屏幕而不是文件,方便排错。my.ini里至少要写basedir、datadir、port=3306、character-set-server=utf8mb4。参数上,utf8mb4是必须的,否则 emoji 和部分生僻字会报错;default_authentication_plugin=mysql_native_password在 8.0 早期版本要显式写,否则老客户端连不上。

2.2 Linux 上用 RPM 包安装 MySQL 8.0

CentOS 7/8 教学机常用 rpm 安装,热搜里「rpm安装mysql」「linux mysql 8.0.44 下载」就是这类需求。

# 1. 下载 bundle 包并解压 tar -xvf mysql-8.0.44-1.el7.x86_64.rpm-bundle.tar # 2. 按依赖顺序安装,common 和 libs 必须先装 rpm -ivh mysql-community-common-8.0.44-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.44-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.44-1.el7.x86_64.rpm rpm -ivh mysql-community-client-8.0.44-1.el7.x86_64.rpm rpm -ivh mysql-community-server-8.0.44-1.el7.x86_64.rpm # 3. 启动并获取临时密码 systemctl start mysqld grep 'temporary password' /var/log/mysqld.log # 4. 安全初始化 mysql_secure_installation

逻辑说明:rpm 安装最容易翻车的是依赖顺序,common和libs没装就装server会报一堆Failed dependencies。mysql_secure_installation会引导你改 root 密码、删匿名用户、禁 root 远程登录,教学环境建议全选 yes。参数上,/etc/my.cnf里把datadir指向大分区,避免默认/var/lib/mysql撑爆根目录。

2.3 Docker 安装 MySQL 的常见失败点

热搜里「docker安装mysql失败」多半是挂载目录权限问题。最小可用命令:

docker run -d --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=Root123! \ -v /data/mysql:/var/lib/mysql \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci

逻辑说明:-v挂载的宿主机目录必须让容器内 mysql 用户(uid 999)有写权限,否则启动时报Permission denied。解决方法是chown -R 999:999 /data/mysql。参数上,--character-set-server和--collation-server要跟在镜像名后面,写在docker run前面会被当成 docker 参数。

提示:教学环境统一用 8.0,不要混用 5.7 和 8.0 的客户端,认证插件不兼容会报Authentication plugin 'caching_sha2_password' cannot be loaded。

3. 库表操作与增删改查:把大纲里的实例跑成可复现的 SQL

大纲中间章节的核心是「数据库增删改查」和「mysql数据库修改结构」。这部分不能只讲语法,要给出一个贯穿始终的实例库,比如学生选课系统。下面用school库演示从建库到改表结构的完整流程。

3.1 建库建表与字符集选择

-- 创建数据库,显式指定字符集 CREATE DATABASE school DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci; USE school; -- 创建学生表 CREATE TABLE student ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, gender ENUM('M','F') DEFAULT 'M', age TINYINT UNSIGNED DEFAULT 0, class_id INT UNSIGNED, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_class (class_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 创建课程表 CREATE TABLE course ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, cname VARCHAR(100) NOT NULL, credit DECIMAL(3,1) DEFAULT 0.0, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 创建选课表,复合主键 CREATE TABLE sc ( sid INT UNSIGNED NOT NULL, cid INT UNSIGNED NOT NULL, score DECIMAL(5,2) DEFAULT 0.00, PRIMARY KEY (sid, cid), CONSTRAINT fk_sc_student FOREIGN KEY (sid) REFERENCES student(id), CONSTRAINT fk_sc_course FOREIGN KEY (cid) REFERENCES course(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

逻辑说明:utf8mb4_unicode_ci比utf8mb4_general_ci排序更准确,教学环境建议统一用 unicode。ENUM适合性别这种固定值,但生产环境不推荐,因为改枚举要 ALTER TABLE。DECIMAL(5,2)存成绩,避免 FLOAT 精度问题。外键约束在教学中要讲,但生产环境高并发下常被禁用,这点要跟学生说清楚。

3.2 增删改查的最小实例与参数说明

-- 插入数据 INSERT INTO student (name, gender, age, class_id) VALUES ('张三', 'M', 20, 1), ('李四', 'F', 19, 1), ('王五', 'M', 21, 2); INSERT INTO course (cname, credit) VALUES ('数据库原理', 3.0), ('操作系统', 4.0); INSERT INTO sc (sid, cid, score) VALUES (1, 1, 85.5), (1, 2, 90.0), (2, 1, 78.0); -- 查询:连表 + 排序 + 分页 SELECT s.name, c.cname, sc.score FROM sc JOIN student s ON sc.sid = s.id JOIN course c ON sc.cid = c.id ORDER BY sc.score DESC LIMIT 0, 10; -- 更新:把张三的操作系统成绩加 5 分 UPDATE sc SET score = score + 5 WHERE sid = 1 AND cid = 2; -- 删除:删除没有选课的学生 DELETE FROM student WHERE id NOT IN (SELECT DISTINCT sid FROM sc);

逻辑说明:INSERT批量插入比单条快,教学时可以用SHOW PROFILES对比。ORDER BY ... LIMIT是热搜「mysql排序」的典型用法,注意LIMIT 0,10的偏移量从 0 开始。UPDATE一定要带 WHERE,否则全表更新,这是血泪经验。DELETE用子查询时,MySQL 不允许直接删除带子查询的同表数据,需要包一层临时表,这是常见翻车点。

3.3 修改表结构的三种场景

热搜「mysql数据库修改结构」通常指加字段、改类型、加索引。

-- 加字段 ALTER TABLE student ADD COLUMN phone VARCHAR(20) DEFAULT NULL AFTER name; -- 改字段类型,注意数据截断风险 ALTER TABLE student MODIFY COLUMN age SMALLINT UNSIGNED DEFAULT 0; -- 加索引 ALTER TABLE student ADD INDEX idx_name (name); -- 改默认值,热搜「mysql设置默认值为0」 ALTER TABLE student ALTER COLUMN age SET DEFAULT 0;

逻辑说明:ADD COLUMN大表上会锁表,8.0 支持 Online DDL,但加索引仍可能阻塞写入。MODIFY改类型前要用SELECT MAX(age)确认数据范围,否则截断报错。ALTER COLUMN ... SET DEFAULT只改默认值,不重建表,速度快。

注意:生产环境改表结构用pt-online-schema-change或gh-ost,教学环境直接 ALTER 即可,但要让学生知道锁表的存在。

4. 事务、锁与存储过程:大纲里最容易讲糊的三个点

大纲后半段通常有「mysql事务处理」「mysql锁的分类」「mysql存储过程」。这三块如果只念概念,学生必睡。我一般用同一个转账实例串起来:事务保证原子性,锁解释并发问题,存储过程封装逻辑。

4.1 事务的 ACID 与隔离级别实例

-- 关闭自动提交 SET autocommit = 0; -- 开启事务 START TRANSACTION; -- 张三转 100 给李四 UPDATE student SET balance = balance - 100 WHERE id = 1; UPDATE student SET balance = balance + 100 WHERE id = 2; -- 提交 COMMIT; -- 如果出错 ROLLBACK;

逻辑说明:autocommit=0后所有语句都在事务里,容易忘记提交导致锁等待。教学时建议显式START TRANSACTION。隔离级别用SELECT @@transaction_isolation查看,默认REPEATABLE-READ。演示脏读要开两个会话,一个改不提交,另一个读,但 MySQL 默认隔离级别下读不到,所以要手动降到READ-UNCOMMITTED。

4.2 锁的分类与排查

热搜「mysql锁的分类」「数据库并发锁」对应大纲里的锁章节。按粒度分表锁和行锁,按模式分共享锁和排他锁。

-- 查看当前锁等待 SELECT * FROM performance_schema.data_locks; SELECT * FROM performance_schema.data_lock_waits; -- 手动加共享锁 SELECT * FROM student WHERE id = 1 LOCK IN SHARE MODE; -- 手动加排他锁 SELECT * FROM student WHERE id = 1 FOR UPDATE;

逻辑说明:InnoDB 行锁基于索引,如果 WHERE 条件没走索引,会升级为表锁,这是最常见的翻车点。data_locks表在 8.0 里替代了INNODB_LOCKS,教学时直接查这个。FOR UPDATE要在事务里用,否则自动提交后锁立即释放。

4.3 存储过程的创建与调用

DELIMITER // CREATE PROCEDURE get_student_score(IN p_sid INT) BEGIN SELECT s.name, c.cname, sc.score FROM sc JOIN student s ON sc.sid = s.id JOIN course c ON sc.cid = c.id WHERE sc.sid = p_sid; END // DELIMITER ; -- 调用 CALL get_student_score(1);

逻辑说明:DELIMITER改分隔符是因为存储过程内部有分号,不改的话客户端会提前截断。参数IN是输入,OUT是输出,INOUT可进可出。存储过程在互联网公司用得少,因为难调试、难版本管理,但教学大纲要求讲,因为银行、电信老系统还在用。

5. 避坑与排查:教学和自学中最容易翻车的 5 个场景

5.1 现象:连接报Too many connections,原因:连接池没关或 max_connections 太小,解决:查SHOW PROCESSLIST杀睡眠连接,调大max_connections,应用侧用连接池并设wait_timeout。

5.2 现象:中文乱码,原因:客户端、连接、服务端字符集不一致,解决:SHOW VARIABLES LIKE 'character%'逐项检查,统一utf8mb4,连接串加characterEncoding=utf8。

5.3 现象:UPDATE影响行数为 0 但没报错,原因:WHERE 条件没匹配到数据,或值本身没变化,解决:先SELECT确认数据存在,再执行更新,注意affected_rows和matched_rows的区别。

5.4 现象:docker安装mysql失败报权限错误,原因:挂载目录属主不是容器内 mysql 用户,解决:chown -R 999:999 /data/mysql,或改用命名卷。

5.5 现象:mysql ssl连接错误,原因:8.0 默认要求 SSL,老客户端不支持,解决:连接串加useSSL=false,或服务端配require_secure_transport=OFF,但生产环境不建议关。

6. 进阶技巧:用一份大纲排出一学期的 MySQL 实训课

如果你手里真有这份教学大纲,别按章节顺序平铺直叙。我一般会把 16 周拆成四个阶段:第 1-4 周环境与建库建表,第 5-8 周增删改查与排序分页,第 9-12 周事务锁与存储过程,第 13-16 周综合项目。每个阶段配一个可验收的实例,比如第一阶段验收「能独立装好 MySQL 并建出 school 库」,第二阶段验收「能写出带 JOIN 和 LIMIT 的查询」,第三阶段验收「能演示两个会话的锁等待」,第四阶段验收「能做一个命令行版选课系统」。

验证方法很简单:让学生在自己的机器上从零跑一遍,录屏或截图关键步骤。我习惯用mysqldump导出最终库,对比结构是否一致。参数上,教学机建议innodb_buffer_pool_size设 256M 就够,max_connections设 200,避免学生开太多会话把机器拖死。

一个具体技巧:把大纲里的每个知识点映射成一条可执行的 SQL 或命令,做成检查清单。比如「事务」对应START TRANSACTION; ... ROLLBACK;,「锁」对应SELECT ... FOR UPDATE,「存储过程」对应CREATE PROCEDURE。这样学生每学完一章,就知道自己能不能跑通对应的命令,而不是只背概念。

我自己踩过的坑是早期教学时直接讲JOIN语法,学生听完还是不会写。后来改成先给两张表的数据,让学生手动写出结果,再对照 SQL,理解快很多。希望帮到你。

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

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

RK3576 HDMI显示调试实战:HPD搭错线与DDC接反排查全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

AI芯片选型实战指南:从120款中精准锁定最优解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:07:21

ESP32本地工作台:填补SDK与真实开发之间的效率鸿沟

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

ROS2小车开发实战:从Gazebo仿真到Autoware实车部署全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:06:14

基于Hadoop与SpringBoot的图书推荐系统:离线计算架构与ItemCF实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:06:02

家校互动系统数据库设计:从DFD到ER图与建表SQL全链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华