跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 零基础入门到实战:核心知识点梳理与避坑指南

系统梳理 MySQL 核心知识体系,涵盖 SQL 基础语法规则、DDL/DML/DCL/DQL 四大分类操作、数据类型与约束选择、多表关系设计及索引优化策略。重点讲解事务 ACID 特性及隔离级别,提供常用查询函数与分页方案,旨在帮助读者建立扎实的数据库基础并规避常见开发陷阱。

路由之心发布于 2026/3/25更新于 2026/9/1087 浏览

一、SQL 基础入门 核心规则与分类

1.1 通用语法(硬性规则)
  1. 语句可单行 / 多行书写,必须以分号结尾;
  2. 可通过空格 / 缩进优化格式,不影响执行;
  3. MySQL 中 SQL 关键字不区分大小写(推荐:关键字大写,表 / 字段名小写);
  4. 注释方式:单行:-- 注释内容(需加空格)、# 注释内容(MySQL 特有,无空格);多行:/* 注释内容 */。
1.2 SQL 四大分类(核心框架)

日常开发 99% 操作集中在DDL/DML/DQL,DCL 仅做权限管理基础了解。

分类全称核心作用核心操作
DDL数据定义语言定义数据库 / 表 / 字段结构建 / 删 / 改库、表、字段
DML数据操作语言操作表中数据增(insert)、删(delete)、改(update)
DQL数据查询语言查询表中记录(开发核心)基础查询 / 聚合 / 分组 / 多表查询等
DCL数据控制语言管理用户 / 数据库权限建用户、授权 / 撤销权限

二、DDL 数据定义语言(库 / 表 / 字段操作)

核心用于定义数据结构,表结构设计是关键(选对字段类型 + 加对约束,决定数据规范性)。

2.1 数据库操作(极简语法)
2.2 表操作(创 / 查 / 改 / 删)
2.2.1 表查询(实战高频)
2.2.2 表创建(核心语法)

关键注意:最后一个字段后无逗号,约束 / 注释紧跟字段定义。

2.2.3 表修改(5 大核心场景)
2.2.4 表删除 / 清空
2.3 字段类型(按需选择,避溢出 / 冗余)

分为数值、字符串、日期三大类,无需死记所有类型,掌握开发常用款即可。

2.3.1 数值类型
类型大小 (byte)有符号范围无符号范围核心场景关键备注
tinyint1(-128,127)(0,255)性别 / 状态(0/1)常用 UNSIGNED
int4(-2¹⁰,2¹⁰-1)(0,2³²-1)年龄 / 普通 ID覆盖大部分业务场景
bigint
8
(-2⁶³,2⁶³-1)
(0,2⁶⁴-1)
订单 ID / 用户 ID
防海量数据溢出
float4浮点型浮点型非精准小数有精度丢失
double8浮点型浮点型非精准小数精度高于 float
decimal(M,D)可变定点型定点型金额 / 薪资M 总长度,D 小数位,金融场景必用
2.3.2 字符串类型
类型大小特性核心场景关键备注
char(n)0-255定长,性能高,浪费空间手机号 / 身份证不足 n 补空格,占用 n 个字符
varchar(n)0-65535变长,性能略低,省空间姓名 / 地址 / 描述按实际长度存储
text0-65535长文本文章 / 详情超出 varchar 时使用
2.3.3 日期类型
类型大小 (byte)格式范围核心场景
date3YYYY-MM-DD1000-01-01 至 9999-12-31生日 / 入职日期
datetime8YYYY-MM-DD HH:MM:SS1000-01-01 至 9999-12-31订单创建时间
timestamp4YYYY-MM-DD HH:MM:SS1970-01-01 至 2038-01-19最后修改时间(支持自动更新)

timestamp 自动更新语法:

2.4 字段约束(保证数据完整性,防脏数据)

约束是作用于字段上的规则,核心目的:保证数据的正确性、有效性、完整性。

核心坑点:主键可搭配 auto_increment 自增,唯一约束不能自增;主键自带非空 + 唯一特性。

约束类型关键字核心作用实战场景
非空约束not null字段值不能为 null姓名 / 手机号 / 用户名
唯一约束unique字段值唯一,允许多个 null邮箱 / 手机号
主键约束primary key一行数据的唯一标识,非空 + 唯一表 ID(每张表仅一个)
默认约束default未指定值时,使用默认值性别 / 状态
外键约束foreign key关联两张表,保证数据一致性员工表 dept_id 关联部门表 id

外键约束核心语法(多表关系基础)

常用级联操作:

on delete set null:删除主表数据,子表外键字段置为 null;

on update cascade:更新主表主键,子表外键字段同步更新。

三、DML 数据操作语言(表数据增删改)

语法简单但坑点多,核心原则:精准过滤条件,禁止无 where 操作全表(生产环境致命错误)。

3.1 新增数据(insert)

推荐指定字段插入,表结构变更时不易报错;批量插入比单条插入效率高 N 倍。

字符串 / 日期类型值必须用单引号包裹,字段与值的顺序一一对应。

3.2 修改数据(update)

强制注意:必须加 where 条件,建议先执行 select 验证过滤结果,再执行 update。

3.3 删除数据(delete)

必须加 where 条件,无条件则删除全表数据;

仅能删除整行数据,若需清空单个字段值,用 UPDATE 表名 SET 字段=null WHERE 条件;

删除后自增主键不重置,数据可通过事务回滚恢复。

3.4 delete vs truncate(核心区别)
特性deletetruncate
操作类型DMLDDL
where 条件支持(精准删除)不支持(仅清全表)
自增主键不重置重置为 1
事务回滚可回滚不可回滚
执行效率低(逐行删除)高(重建表结构)

四、DQL 数据查询语言(开发核心,重中之重)

MySQL 最核心的操作,覆盖基础查询→复杂多表查询,核心原则:杜绝 SELECT *(性能低 + 表结构变更易报错),掌握执行顺序是关键。

4.1 完整语法与执行顺序
书写顺序
实际执行顺序(关键)

书写顺序:SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

实际执行顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

执行顺序决定:where 不能使用聚合函数,having 可以。

4.2 基础查询(极简)
4.3 条件查询(where,实战高频)

通过运算符实现精准过滤,重点掌握 like/between...and/in/is null。

常用运算符

类型运算符示例
比较>、>=、<、<=、=、<>(不等于)age <> 20
范围between ... and ...age BETWEEN 20 AND 30
集合in(...)dept_id IN(1,2,3)
模糊likename LIKE '张%'(姓张)、name LIKE '__'(两个字)
空值is null、is not nulldept_id IS NOT NULL
逻辑and、or、notage>20 AND gender='男'
4.4 聚合函数(纵向统计)

将一列数据作为整体进行计算,null 值不参与所有聚合函数运算;统计数量优先使用 COUNT (*)。

函数功能示例
count统计记录数COUNT (*) 员工总数
max求最大值MAX (salary) 最高工资
min求最小值MIN (age) 最小年龄
avg求平均值AVG (salary) 平均工资
sum求和SUM (salary) 工资总和
4.5 分组查询(group by + having)
4.6 排序查询(order by)

支持单 / 多字段排序,默认ASC 升序,降序用DESC。

多字段排序:第一个字段相同,才按第二个排。

4.7 分页查询(limit,MySQL 方言)

前端分页核心,起始索引从 0 开始,公式:起始索引 = (页码 -1) * 每页显示记录数。

4.8 常用函数(字段值处理,无需代码层操作)
IF 函数(三元运算符)
CASE 表达式(多条件判断)

无需代码层处理,数据库直接返回业务所需值,提升效率

4.9 综合查询案例(实战组合)

五、表关系设计 (从单表到多表,避数据冗余)

实际业务无单表场景,通过外键约束关联多张表,遵循三大关系设计原则,核心:相同信息仅存储一次,杜绝数据冗余。

5.1 设计核心原则
  1. 唯一性:相同信息仅在一张表中存储,杜绝冗余。
  2. 一致性:通过外键关联表,保证数据联动一致。
  3. 适度性:按需设计,不过度设计表关系。
5.2 三大表关系(实现方式直击核心)
关系类型定义实现方式实战案例
一对多一方多条数据对应另一方一条数据多的一方添加外键,关联一的一方主键部门 - 员工、分类 - 商品
一对一双方数据一一对应任意一方添加外键 +唯一约束,关联另一方主键用户 - 用户详情、学生 - 学生档案
多对多双方数据互相一对多建中间表,含两个外键,分别关联两张主表主键学生 - 课程、商品 - 订单

多对多实战示例(学生 - 课程)

六、多表查询(DQL 进阶,实战核心)

基于表关系实现,分为连接查询和子查询,核心:找到关联字段(外键),避免笛卡尔积。

6.1 连接查询
6.1.1 内连接 (查交集,仅查有联动关系的数据)

仅查两张表有关联的数据,显式内连接更规范,推荐使用。

6.1.2 外连接 (查全量 + 交集)

保留一张表全量数据,无关联的补 null;左 / 右外连接可通过交换表顺序互相转换。

6.2 子查询(嵌套查询)

将一个查询结果作为外层查询的条件、字段或临时表,需用 () 包裹,执行顺序:先子查询,后外层查询。按结果类型分 4 类,标量 / 列子查询为开发常用。

子查询类型结果类型常用操作符
标量单个值(数字 / 字符串 / 日期)=、>、<、>=、<=
列一列多行in、not in
行一行多列=、in
表多行多列作为临时表关联

常用子查询示例

七、事务(保证数据一致性,高可用核心)

适用于多 DML 操作原子性场景(如转账、删部门同步删员工等),核心:一组操作要么全成,要么全败。

7.1 核心概念

MySQL 默认自动提交事务(单条 DML 执行后立即提交),需手动开启事务实现多操作的原子性。

7.2 事务操作(三步法)

关闭自动提交:SET AUTOCOMMIT=0;(仅当前会话有效),执行 COMMIT 后才会提交。

7.3 事务四大特性
  1. 原子性(Atomicity):事务是不可分割的最小单元,操作要么全成,要么全败;
  2. 一致性(Consistency):事务执行完成后,数据状态保持一致(如转账总余额不变);
  3. 隔离性(Isolation):数据库提供隔离机制,保证并发事务互不干扰;
  4. 持久性(Durability):事务提交 / 回滚后,对数据的修改永久生效。
7.4 事务隔离级别(解决并发问题)

多事务并发执行会出现脏读、不可重复读、幻读,MySQL 默认REPEATABLE READ(可重复读),兼顾隔离性和并发性能。

隔离级别脏读不可重复读幻读核心解决
读未提交(READ UNCOMMITTED)✔️✔️✔️无
读已提交(READ COMMITTED)❌✔️✔️脏读
可重复读(REPEATABLE READ,默认)❌❌✔️脏读、不可重复读
串行化(SERIALIZABLE)❌❌❌所有并发问题(并发性能极低)

查询 / 设置隔离级别:

八、索引(性能优化核心,以空间换时间)

索引是帮助数据库高效获取数据的 B+Tree 数据结构,核心:提升查询效率,降低增删改效率,并非越多越好。

8.1 核心优缺点

索引是帮助数据库高效获取数据的 B+Tree 数据结构,核心:提升查询效率,降低增删改效率,并非越多越好。

优点缺点
提升查询效率,减少数据库 IO 成本占用磁盘存储空间
加速排序 / 分组,降低 CPU 消耗增删改需维护索引,效率降低
8.2 索引操作语法

主键字段 / 唯一约束字段会自动创建索引,无需手动操作。

8.3 索引创建原则(实战避坑)
  1. 查询高频、增删改低频的字段建索引(如姓名 / 手机号);
  2. 区分度高的字段建索引(如身份证),区分度低的不建(如性别 / 状态);
  3. 大表建索引,小表(<1000 条)无需建(全表扫描更快);
  4. 一张表索引数不超过 5 个。
8.4 常见索引失效场景(高频坑点)
  1. 索引列参与运算 / 使用函数:age+1=25/SUBSTR(name,1,1)='张';
  2. 模糊查询以 % 开头:name LIKE '%张';
  3. or 连接的字段有一个无索引;
  4. 隐式类型转换:phone='123456'(phone 为 int 类型);
  5. 联合索引不遵循最左匹配原则。

目录

  1. 一、SQL 基础入门 核心规则与分类
  2. 1.1 通用语法(硬性规则)
  3. 1.2 SQL 四大分类(核心框架)
  4. 二、DDL 数据定义语言(库 / 表 / 字段操作)
  5. 2.1 数据库操作(极简语法)
  6. 2.2 表操作(创 / 查 / 改 / 删)
  7. 2.2.1 表查询(实战高频)
  8. 2.2.2 表创建(核心语法)
  9. 2.2.3 表修改(5 大核心场景)
  10. 2.2.4 表删除 / 清空
  11. 2.3 字段类型(按需选择,避溢出 / 冗余)
  12. 2.3.1 数值类型
  13. 2.3.2 字符串类型
  14. 2.3.3 日期类型
  15. 2.4 字段约束(保证数据完整性,防脏数据)
  16. 三、DML 数据操作语言(表数据增删改)
  17. 3.1 新增数据(insert)
  18. 3.2 修改数据(update)
  19. 3.3 删除数据(delete)
  20. 3.4 delete vs truncate(核心区别)
  21. 四、DQL 数据查询语言(开发核心,重中之重)
  22. 4.1 完整语法与执行顺序
  23. 书写顺序
  24. 实际执行顺序(关键)
  25. 4.2 基础查询(极简)
  26. 4.3 条件查询(where,实战高频)
  27. 4.4 聚合函数(纵向统计)
  28. 4.5 分组查询(group by + having)
  29. 4.6 排序查询(order by)
  30. 4.7 分页查询(limit,MySQL 方言)
  31. 4.8 常用函数(字段值处理,无需代码层操作)
  32. IF 函数(三元运算符)
  33. CASE 表达式(多条件判断)
  34. 4.9 综合查询案例(实战组合)
  35. 五、表关系设计 (从单表到多表,避数据冗余)
  36. 5.1 设计核心原则
  37. 5.2 三大表关系(实现方式直击核心)
  38. 六、多表查询(DQL 进阶,实战核心)
  39. 6.1 连接查询
  40. 6.1.1 内连接 (查交集,仅查有联动关系的数据)
  41. 6.1.2 外连接 (查全量 + 交集)
  42. 6.2 子查询(嵌套查询)
  43. 七、事务(保证数据一致性,高可用核心)
  44. 7.1 核心概念
  45. 7.2 事务操作(三步法)
  46. 7.3 事务四大特性
  47. 7.4 事务隔离级别(解决并发问题)
  48. 八、索引(性能优化核心,以空间换时间)
  49. 8.1 核心优缺点
  50. 8.2 索引操作语法
  51. 8.3 索引创建原则(实战避坑)
  52. 8.4 常见索引失效场景(高频坑点)

更多推荐文章

查看全部
  • Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化
  • Spring Boot 视图层开发:主流模板引擎集成实战
  • AI 技术在游戏开发与内容创作中的应用实践
  • 多模态动态融合模型 Predictive Dynamic Fusion 信度概念与参数解析
  • 基于机器学习的农产品价格数据分析与预测可视化系统设计与实现
  • OpenClaw 相关开源 AI 项目汇总
  • 本地 AI 小说生成器部署指南:从零搭建与配置
  • 长亭雷池 WAF 部署与实战指南
  • VS Code 实时显示代码作者与 Git 插件配置技巧
  • 大型语言模型(LLM)入门指南:核心知识点与资源整理
  • Python 函数核心知识详解:定义、参数与作用域管理
  • Neo4j Desktop 2.0 安装教程:自定义安装路径
  • 服务端高并发分布式架构演进之路
  • OpenClaw 多端交互实战指南:Web/TUI/钉钉集成详解
  • Lostlife2.0 任务系统智能化:LLama-Factory 驱动动态任务生成
  • 算法兵法全略
  • 使用 Web Scraper 插件高效爬取知乎评论数据
  • ABP vNext WebAPI 应用开发指南
  • OpenHarmony 使用 shelf_web_socket 构建 WebSocket 服务端实战指南
  • C++26 重大更新概述及 Clang 17 支持现状分析

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online