清风日常

Stay curious. Stay gentle.

听一会儿

4 首收藏
LOVE 2000 封面

LOVE 2000

遠野ひかる

0:004:23
首页/MySQL/正文

MySQL 入门指南:从数据建模到日常维护

面向初学者的 MySQL 系列导读,以统一的部门与员工数据贯穿建表、增删改查、关联查询、权限事务、索引、窗口函数、应用连接和备份恢复。

文章目录 7 个章节

MySQL 入门需要建立一条完整的思路:先把业务信息组织成表,再用 SQL 读写数据,通过约束和事务维持规则,最后考虑查询效率、应用访问与数据恢复。

这套指南以 MySQL 8.4、InnoDB、utf8mb4 为主要环境。部分功能在 MySQL 8.0 中也可用,但具体限制、认证方式和工具选项要以实际版本为准;不能把 MariaDB 当作语法和行为完全相同的替代品。

正文按概念、示例、结果解释和速查展开,不要求编程基础。应用连接章节提供接口层面的写法,重点是参数绑定、事务边界与连接管理。

一、整套指南的阅读顺序

章节 内容 要建立的认识
01 数据库概念、SQL 分类与 DDL 连接到哪里,数据如何组成表,类型如何选择
02 DML 与单表查询 如何写入、筛选、分组、排序和分页
03 函数、约束、表关系与多表查询 如何表达关系、维护完整性并正确汇总
04 用户权限、事务与隔离级别 哪个账号能做什么,一组修改怎样提交或撤销
05 索引与 EXPLAIN 查询通过什么路径找数据,怎样判断优化方向
06 视图、CTE 与窗口函数 如何拆分查询、表达层级并进行分组内分析
07 应用连接与 SQL 安全 参数如何进入 SQL,连接和事务由谁管理
08 备份恢复与日常维护 数据怎样保存、恢复,常见故障从哪里排查

前四章建立使用基础,后四章补充从“能写 SQL”走向“能稳定使用数据库”所需的知识。遇到不熟悉的表和字段,可以回到第一章查看定义。

二、先分清服务端、客户端与数据库

text
命令行客户端、管理界面或业务程序
                  ↓ 连接与认证
        MySQL 服务端的一个实例
                  ↓
           数据库 mysql_learn
                  ↓
           dept、emp 等数据表
                  ↓
          行、列、索引与约束
名称 含义
MySQL 服务端 处理连接、执行 SQL、管理持久数据的程序,常见进程名为 mysqld
MySQL 客户端 连接服务端的工具,mysql 命令只是其中一种
实例 一套运行中的服务及其配置、内存与数据文件等资源
数据库 实例中的对象命名空间,在 MySQL 中常与 schema 同义
表 用列定义结构、用行保存记录的数据对象
会话 客户端连接后的执行环境,包含当前数据库、事务状态等信息

安装了 mysql 命令不等于已经安装并启动服务端。关闭客户端窗口,也不等于停止数据库服务。

三、准备环境与确认连接

可以使用本地安装、独立虚拟机中的 MySQL,或管理员提供的开发数据库。选择有权限管理、数据范围明确、便于恢复的环境,不在真实业务库中直接运行结构变更示例。

环境 连接前需要确认
本机安装 服务是否运行、账号如何认证、监听端口或 socket 路径
远程开发实例 主机、端口、账号来源范围、网络和 TLS 要求
容器 容器状态、端口映射、持久卷与初始化配置
图形管理工具 实际连接参数和 SQL 执行的目标数据库

先查看客户端,再连接服务端:

bash
mysql --version
mysql --protocol=TCP -h 127.0.0.1 -P 3306 -u root -p

root 仅表示本机初始化管理的示例账号;实际连接应使用被授权的账号。-p 后不写明文密码,让客户端提示输入。

Unix 类系统中,localhost 常使客户端选择本地 socket;127.0.0.1 配合 TCP 则明确走网络连接。端口参数不一定会改变 socket 连接方式。

进入客户端后确认环境:

sql
SELECT VERSION() AS server_version,
       DATABASE() AS current_database,
       CURRENT_USER() AS authenticated_account;

SELECT @@autocommit,
       @@transaction_isolation,
       @@session.time_zone,
       @@session.sql_mode;

客户端版本与服务端版本可能不同。后续语法是否可用,主要由服务端能力和会话设置决定。

四、贯穿全套内容的示例模型

指南使用一个小型人员管理模型,统一数据库名为 mysql_learn:

text
部门 dept ──一对多── 员工 emp
                       │
                       └── manager_id 指向同表中的上级员工

员工 emp ──多对多── 技能 skill
             通过 emp_skill 关联

员工 emp ──零或一份── 员工详情 emp_profile
对象 定义位置 数据位置
dept、emp 第一章 第二章
skill、emp_skill、emp_profile 第三章 第三章
account 第四章 第四章
联合索引 第五章 使用已有员工数据
视图 第六章 查询已有表,不保存一份独立员工数据

第一章建立核心结构,第二章写入一组固定数据,后续查询就可以使用相同字段。新开连接时,先执行 USE mysql_learn;,因为当前数据库属于会话状态。

各章中标为“格式示例”或“独立示例”的片段用于解释某种操作,不属于必须从头到尾执行的初始化脚本。尤其是删除表、撤销权限和回滚示例,需要按说明判断适用范围。

五、SQL 的书写约定

关键字大写、数据库和表名小写、字段名使用下划线,有助于统一阅读体验:

sql
SELECT id, name, salary
FROM emp
WHERE status = 1
ORDER BY salary DESC, id ASC;
约定 原因
SQL 通常以 ; 结束 客户端据此判断一条语句已输入完成
字符串使用单引号 与标识符区分,避免受双引号模式影响
需要时用反引号引用标识符 处理保留字等名称,优先取不冲突的名称
显式写出插入列和查询列 降低表结构变化带来的影响
多表字段使用别名限定 明确字段来自哪一张表
修改前检查条件和目标 降低更新、删除范围错误的可能

对象名的大小写行为受系统和 lower_case_table_names 等设置影响。不要依赖“在自己机器上大小写都能用”,统一命名更便于迁移。

注释的常见写法:

sql
-- 双横线后留空格
# MySQL 风格注释
/* 可以跨行的注释 */

命令行中的 -> 通常表示语句尚未结束;引号没有闭合时也可能出现续行提示。需要放弃当前未提交的输入,可以使用客户端的 \c,它不是数据库事务的回滚命令。

六、从业务问题到 SQL

考虑“查询每个部门的在职员工人数”,先明确结果每一行代表什么:一行代表一个部门。然后决定参与的表、连接条件、过滤位置和聚合方式。

text
确定结果粒度 → 选择数据与关系 → 过滤和计算
                                 ↓
                    排序与分页 → 检查结果与执行计划

如果要保留没有员工的部门,就需要外连接;如果只统计在职员工,条件应放在正确位置;如果只计算真实匹配的员工,不能把外连接的占位行算作一名员工。

这类问题体现了 SQL 学习的重点:语法只是表达方式,结果正确性来自对数据关系和边界情况的理解。

七、常见问题从哪章查

现象 优先检查 对应章节
连接失败 服务、协议、地址、端口、认证与授权来源 第一、四、七章
找不到表或列 当前数据库、名称大小写、表结构是否已建立 第一、二章
中文乱码或比较结果不符预期 连接字符集、字段字符集与排序规则 第一、七章
聚合人数偏多 连接是否放大行数,是否把占位行计入 第三章
更新未生效或不能回滚 自动提交、事务边界、隐式提交与影响行数 第四章
查询变慢 数据量、过滤条件、连接方式、索引与锁等待 第五、八章
应用偶发提交或连接异常 连接池状态、超时与事务处理 第七章
备份文件存在但不能恢复 工具状态、对象范围、权限和恢复验证 第八章

开始阅读:第一章:数据库概念、SQL 分类与 DDL。

Aron 的清风日常

作者 Aron · 发布于 2026.04.20

愿这份记录能为你提供一点参考。发现问题,欢迎通过 GitHub 或 邮件交流。

如果这篇记录对你有用,留下一份喜欢。

← 所有文章继续阅读MySQL 入门(八):备份恢复与日常维护 →
SEARCH MY NOTES

在记录里,找一点答案

搜索标题、标签与全文 · 按 Esc 关闭