一、前言本学期《MySQL 数据库技术》系统学习了 MySQL 各类 SQL 操作语句覆盖库、表、数据、查询、事务、权限、函数等全场景。本文完整梳理全部 SQL 分类每条语句包含标准语法、使用规范、适用场景、实操案例、高频错误图文结合、原创完整同时记录本人学习中遇到的难点与待深入研究的问题适合 MySQL 初学者系统复习查阅。二、SQL 整体分类总览SQL 语句按功能分为 5 大类思维导图如下配图建议分类架构图DDL 数据定义语言库、表、字段结构创建 / 修改 / 删除DML 数据操作语言表内数据增删改DQL 数据查询语言SELECT 核心查询使用频率最高DCL 数据控制语言用户创建、权限分配、账户管理TCL 事务控制语言事务提交、回滚、保存点三、DDL 数据定义语言库 表操作3.1 数据库操作1. 创建数据库标准语法sqlCREATE DATABASE [IF NOT EXISTS] 库名 DEFAULT CHARACTER SET 字符集 DEFAULT COLLATE 排序规则;使用规范必须加IF NOT EXISTS避免库已存在报错生产环境强制指定字符集utf8mb4支持 emoji排序规则utf8mb4_unicode_ci实战案例sqlCREATE DATABASE IF NOT EXISTS student_db DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;易错点 ⚠️ 直接写CREATE DATABASE student_db;不指定字符集默认 latin1中文存储乱码 ⚠️ 数据库名称不能含空格、中文不推荐、MySQL 关键字。2. 查询数据库sql-- 查看所有库 SHOW DATABASES; -- 查看库创建详情 SHOW CREATE DATABASE student_db; -- 切换数据库 USE student_db;3. 修改数据库字符集sqlALTER DATABASE student_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;4. 删除数据库sqlDROP DATABASE IF EXISTS student_db;⚠️ 高危操作删除后所有表、数据永久丢失生产禁止随意执行。3.2 数据表操作1. 创建表基础语法sqlCREATE TABLE IF NOT EXISTS 表名( 字段1 数据类型 [约束], 字段2 数据类型 [约束], ... 表级约束 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;约束分类主键 PRIMARY KEY、唯一 UNIQUE、非空 NOT NULL、默认值 DEFAULT、外键 FOREIGN KEY实战案例sqlCREATE TABLE IF NOT EXISTS student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 学生主键, name VARCHAR(20) NOT NULL COMMENT 学生姓名, age TINYINT DEFAULT 18 COMMENT 年龄, class_id INT COMMENT 班级id, create_time DATETIME DEFAULT NOW() COMMENT 创建时间, UNIQUE uk_name(name), FOREIGN KEY fk_class(class_id) REFERENCES class(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT学生信息表;使用规范存储引擎统一使用 InnoDB支持事务、外键每个字段加COMMENT注释便于后期维护主键统一自增 INT避免字符串主键常见错误外键关联字段数据类型不一致创建失败VARCHAR 不指定长度未写IF NOT EXISTS重复建表抛出异常。2. 查看表结构sqlDESC student; SHOW COLUMNS FROM student; SHOW CREATE TABLE student; -- 查看完整建表语句3. 修改表结构 ALTER TABLE添加字段sqlALTER TABLE student ADD COLUMN email VARCHAR(50) AFTER name;修改字段类型 / 名称sqlALTER TABLE student MODIFY COLUMN age SMALLINT; ALTER TABLE student CHANGE COLUMN email stu_email VARCHAR(60);删除字段sqlALTER TABLE student DROP COLUMN email;添加 / 删除主键、唯一索引sqlALTER TABLE student ADD PRIMARY KEY(id); ALTER TABLE student DROP INDEX uk_name;4. 删除表sqlDROP TABLE IF EXISTS student;3.3 索引操作DDL 补充sql-- 创建普通索引 CREATE INDEX idx_stu_name ON student(name); -- 删除索引 DROP INDEX idx_stu_name ON student; 应用场景WHERE、JOIN 查询条件字段建立索引大幅提升查询速度索引过多会降低插入更新性能。四、DML 数据操作语言增删改4.1 INSERT 插入数据语法 1全字段插入sqlINSERT INTO student VALUES(1,张三,20,1,NOW());语法 2指定字段插入推荐sqlINSERT INTO student(name,age,class_id) VALUES(李四,19,2);语法 3批量插入性能最优sqlINSERT INTO student(name,age) VALUES(王五,18),(赵六,21),(钱七,20);语法 4查询结果插入新表sqlCREATE TABLE student_back LIKE student; -- 复制表结构 INSERT INTO student_back SELECT * FROM student WHERE age18;规范与易错点批量插入比多条单 INSERT 效率高数十倍非空字段必须赋值否则报错唯一索引字段不能插入重复值字符串、日期必须加单引号数字不用。4.2 UPDATE 更新数据sql-- 标准写法必须带WHERE UPDATE student SET age22 WHERE id3; -- 多字段更新 UPDATE student SET age20,class_id3 WHERE name张三;⚠️ 致命易错点省略WHERE条件会更新表中全部数据生产环境禁止4.3 DELETE 删除数据sqlDELETE FROM student WHERE id5;拓展TRUNCATE 清空表sqlTRUNCATE TABLE student;DELETE vs TRUNCATE 对比表格表格特性DELETETRUNCATE日志记录逐行记录可回滚不记录单行日志不可回滚自增主键保留原有数值重置自增为 1触发器触发 DELETE 触发器不触发速度大数据量慢速度极快五、DQL 数据查询语言SELECT核心重点5.1 基础完整语法结构执行顺序标注sqlSELECT 字段列表 -- 5 FROM 表名/关联表 -- 1 WHERE 行过滤条件 -- 2 GROUP BY 分组字段 -- 3 HAVING 分组后过滤 -- 4 ORDER BY 排序字段 -- 6 LIMIT 分页偏移,条数; -- 75.2 基础查询sql-- 查询全部字段 SELECT * FROM student; -- 查询指定字段、别名 SELECT id AS 学号,name AS 姓名 FROM student; -- 去重 DISTINCT SELECT DISTINCT class_id FROM student;5.3 WHERE 条件过滤运算符 ! AND OR LIKE IN BETWEEN IS NULLsql-- 模糊查询%任意字符_单个字符 SELECT * FROM student WHERE name LIKE 张%; -- 空值判断必须用IS NULL不能用NULL SELECT * FROM student WHERE email IS NULL; -- 区间查询 SELECT * FROM student WHERE age BETWEEN 18 AND 22;⚠️ 易错NULL查询无结果NULL 不能用等值匹配。5.4 聚合函数配合 GROUP BY常用聚合COUNT() SUM() AVG() MAX() MIN()sql-- 每个班级人数、平均年龄 SELECT class_id,COUNT(*) 人数,AVG(age) 平均年龄 FROM student GROUP BY class_id HAVING COUNT(*)5; -- 分组后过滤不能用WHERE 区分WHERE 过滤原始数据HAVING 过滤分组聚合结果。5.5 多表连接查询内连接 INNER JOIN只返回匹配数据sqlSELECT s.name,c.class_name FROM student s INNER JOIN class c ON s.class_id c.id;左连接 LEFT JOIN左表全部数据右表无匹配补 NULLsqlSELECT s.name,c.class_name FROM student s LEFT JOIN class c ON s.class_id c.id;右连接 RIGHT JOIN自连接同一张表关联查询树形结构、上下级场景5.6 子查询标量子查询返回单个值sqlSELECT name FROM student WHERE class_id(SELECT id FROM class WHERE class_name一班);IN 子查询、EXISTS 存在性子查询大数据量性能优于 IN5.7 分页 LIMITsql-- 第1页10条数据 SELECT * FROM student LIMIT 0,10; -- 公式LIMIT (页码-1)*每页条数,每页条数⚠️ 深度分页LIMIT 100000,10性能极差优化方案主键过滤分页。5.8 排序 ORDER BYsql-- 年龄降序同年龄学号升序 SELECT * FROM student ORDER BY age DESC,id ASC;六、TCL 事务控制语言InnoDB 专属核心语法sql-- 开启事务 START TRANSACTION; -- 执行DML语句 UPDATE account SET moneymoney-100 WHERE id1; UPDATE account SET moneymoney100 WHERE id2; -- 提交事务永久生效 COMMIT; -- 回滚撤销全部操作 ROLLBACK; -- 保存点局部回滚 SAVEPOINT point1; ROLLBACK TO point1;事务四大特性 ACID原子性 Atomic全部成功或全部失败一致性 Consistent执行前后数据合法隔离性 Isolate事务间互不干扰4 种隔离级别持久性 Durable提交后数据永久保存易错点DDL 语句CREATE/ALTER执行会自动提交事务MyISAM 引擎不支持事务忘记 COMMIT 会导致锁表阻塞其他业务操作。七、DCL 数据权限控制语句7.1 创建用户sqlCREATE USER user1localhost IDENTIFIED BY 123456;7.2 分配权限 GRANTsql-- 给user1授予student_db全部表查询、插入权限 GRANT SELECT,INSERT ON student_db.* TO user1localhost; -- 授予全部权限 GRANT ALL PRIVILEGES ON *.* TO admin%; -- 刷新权限生效 FLUSH PRIVILEGES;7.3 回收权限 REVOKEsqlREVOKE INSERT ON student_db.* FROM user1localhost;7.4 删除用户sqlDROP USER IF EXISTS user1localhost;⚠️ 账号主机标识%代表允许任意 IP 访问生产环境限制指定 IP 提升安全。八、常用函数 SQL8.1 字符串函数CONCAT(str1,str2)拼接、SUBSTRING()截取、LENGTH()长度、REPLACE()替换sqlSELECT CONCAT(name,-,age) FROM student;8.2 日期函数NOW()当前时间、DATE_ADD()日期增减、DATEDIFF()日期差值sqlSELECT DATE_FORMAT(create_time,%Y-%m-%d) FROM student;8.3 数学函数ROUND()四舍五入、FLOOR 向下取整、CEIL 向上取整8.4 流程控制函数sql-- IF判断 SELECT name,IF(age18,成年,未成年) FROM student; -- CASE多分支 SELECT name, CASE WHEN class_id1 THEN 一班 WHEN class_id2 THEN 二班 ELSE 其他班级 END AS 班级 FROM student;九、高频易错点汇总学习经验总结WHERE 与 HAVING 混淆聚合结果过滤只能用 HAVINGUPDATE/DELETE 忘记 WHERE全表修改 / 删除线上重大事故NULL 判断使用 NULL无查询结果必须 IS NULL/IS NOT NULL字符集未指定 utf8mb4emoji、生僻中文乱码批量操作不加事务批量插入更新中途报错数据不一致关联查询不建索引多表联查全表扫描查询超时LIMIT 深度分页偏移量过大SQL 执行缓慢外键使用不规范字段类型不一致、主表数据无法删除关键字不做转义表名 / 字段名使用 name、order 等关键字语法报错需用包裹MyISAM 误用事务引擎不支持回滚、崩溃丢数据。Mysql 的思维导图MySQL全套SQL语句知识汇总 ┌───────────────┬───────────────┬───────────────┬───────────────┐ DDL结构语言 DML增删改数据 DQL查询核心 TCL事务控制 DCL权限管理 │ │ │ │ │ ┌──────┴──────┐ ┌─────┴─────┐ ┌────┴────┐ ┌────┴────┐ ┌────┴────┐ 数据库/表/索引 INSERT/UPDATE SELECT全套语法 事务提交回滚 用户创建授权 │ ┌───────┴───────┐ 分组聚合/多表联查/分页排序 ┌───────────────┬───────────────┐ 内置函数工具 高频易错避坑 学习复盘总结十、学习遗留疑问与后续实践计划疑问MySQL 四种事务隔离级别在业务中如何选型幻读场景该如何业务层面规避疑问百万级数据表索引设计规则联合索引最左匹配失效完整场景有哪些后续实践搭建千万级测试数据表对比不同查询语句执行效率学习 EXPLAIN 执行计划分析实操分库分表 SQL 适配学习分页、联查分片改造方案模拟线上慢 SQL掌握索引优化、SQL 重写完整流程。十一、结语本文完整覆盖 MySQL 课程全部 SQL 语句从库表结构定义、数据增删改查、事务、权限到内置函数全部包含每条语句配套可直接运行的实战代码。整理过程中复盘了课堂实操踩过的各类坑梳理出通用避坑规范后续将通过大型项目实操深化 SQL 优化、高级特性的学习进一步夯实数据库开发基础。