前言
本文为本学期《MySQL 数据库技术》课程课后知识复盘原创文档,梳理课堂全部标准 SQL 语法,包含通用语法规则、语句定义、使用约束与易混淆知识点,覆盖 DDL、DML、DCL、TCL 四大 SQL 体系与数据表约束。 本文全部采用通用抽象表名、字段演示语法结构。
参考资料:MySQL 8.0 官方开发文档
一、SQL 语句整体四大分类
SQL 按照功能分为四类,各司其职,边界清晰:
表格
| 分类缩写 | 英文全称 | 核心功能定位 | 代表语句关键词 |
|---|---|---|---|
| DDL | Data Definition Language 数据定义语言 | 定义 / 修改 / 删除数据库、数据表结构 | CREATE、DROP、ALTER、TRUNCATE |
| DML | Data Manipulation Language 数据操作语言 | 对表内存储的数据行进行增删改查 | SELECT、INSERT、UPDATE、DELETE |
| DCL | Data Control Language 数据控制语言 | 管理数据库账号、分配 / 回收访问权限 | CREATE USER、GRANT、REVOKE、DROP USER |
| TCL | Transaction Control Language 事务控制语言 | 管理 InnoDB 引擎事务提交、回滚逻辑 | START TRANSACTION、COMMIT、ROLLBACK、SAVEPOINT |
二、DDL 数据定义语言(仅操作库、表结构,不操作数据行)
2.1 数据库层级操作语句
2.1.1 创建数据库
标准语法
sql
语法规则 & 易错点 ⚠️
IF NOT EXISTS可选,作用:数据库不存在时才创建,规避 “库已存在” 报错;省略则库重复会直接抛出异常;- MySQL 内置
utf8字符集存在存储长度限制,通用标准字符集为utf8mb4; - 数据库名若为 MySQL 系统关键字,必须使用反引号
`包裹名称; - 字符集与校对规则可省略,自动继承 MySQL 全局默认配置。
2.1.2 数据库通用管理语句
sql
2.2 数据表层级操作语句
2.2.1 创建数据表
标准语法
sql
语法规范 💡
COMMENT为注释关键字,可给表、字段添加描述文本,便于维护;InnoDB是默认事务型存储引擎,MyISAM不支持事务、外键;AUTO_INCREMENT自增属性仅能赋值给整数类型主键字段。
2.2.2 修改数据表 ALTER TABLE
- 新增字段
sql
- 修改字段数据类型、约束
sql
- 修改字段名称 + 类型
sql
- 删除指定字段
sql
- 修改数据表名称
sql
2.2.3 清空表、删除整张表
sql
TRUNCATE 与 DELETE 核心区分 ⚠️
表格
| 语句 | 语句类型 | 事务支持 | 自增主键 | 执行逻辑 |
|---|---|---|---|---|
| TRUNCATE | DDL 结构语言 | 不支持回滚 | 自动重置为初始值 | 销毁原表、重建空表 |
| DELETE | DML 数据语言 | 支持事务回滚 | 保持原有数值 | 逐行删除数据记录 |
三、DML 数据操作语言(仅操作表内存储的数据行)
3.1 SELECT 查询语句(完整标准语法顺序,顺序不可调换)
sql
各子句语法说明
DISTINCT:去重关键字,消除查询结果中完全重复的数据行;JOIN关联分类:INNER JOIN:仅返回两张表匹配成功的数据;LEFT JOIN:完整保留左表全部数据,右表无匹配字段填充NULL;
WHERE:对原始未分组的数据行做过滤,不能使用聚合函数;GROUP BY:按指定字段对数据分组,搭配聚合函数使用;HAVING:仅能对GROUP BY分组完成后的结果过滤,支持聚合函数;ORDER BY:排序,ASC升序(默认)、DESC降序;LIMIT:限制返回行数,参数 1 为偏移下标,参数 2 为读取条数;单参数时代表 “读取前 N 行”。
聚合函数通用定义
COUNT()统计行数、SUM()求和、AVG()平均值、MAX()最大值、MIN()最小值。
查询语法高频易错点 ⚠️
SELECT *代表查询表全部字段,标准化开发中禁止使用,仅按需查询所需字段;LIKE '%关键词'前置通配符会导致索引失效,海量数据场景需规避;GROUP BY后 SELECT 子句仅允许出现分组字段或聚合函数,严格模式下语法报错。
3.2 INSERT 插入数据语句
语法 1:单行插入
sql
语法 2:多行批量插入
sql
语法 3:查询结果写入表
sql
语法规范 💡
必须显式书写插入字段列表;省略字段列表时,值必须完整匹配表全部字段顺序,表结构变更后极易报错。
3.3 UPDATE 更新数据语句
sql
致命易错点 ⚠️
省略WHERE条件会更新表内全部数据行,语法无报错但会造成全表数据篡改风险。
3.4 DELETE 删除数据语句
sql
开发规范 💡
标准数据存储设计不使用物理删除;增加is_delete标记字段,通过UPDATE修改标记替代DELETE物理删除语句。
四、DCL 数据控制语言(账号、权限管理,数据库管理员专用)
4.1 创建数据库账号
sql
localhost:仅本地服务器登录;%:允许任意远程 IP 访问。
4.2 授予访问权限 GRANT
sql
4.3 回收已有权限 REVOKE
sql
4.4 删除数据库账号
sql
权限操作易错点 ⚠️
新增 / 回收权限后,必须执行FLUSH PRIVILEGES;刷新权限配置,修改才会即时生效。
五、TCL 事务控制语言(仅 InnoDB 存储引擎支持)
基础语法
sql
事务核心注意事项 ⚠️
DDL 类语句(CREATE/ALTER/DROP/TRUNCATE)执行时会自动提交当前未完成事务,事务流程中禁止执行 DDL 语句。
补充概念:事务 ACID 四大特性
- 原子性 (Atomic):事务内操作要么全部执行,要么全部撤销;
- 一致性 (Consistent):事务执行前后数据完整性约束不被破坏;
- 隔离性 (Isolated):多并发事务之间操作互不干扰;
- 持久性 (Durable):事务提交后,数据修改永久保存,宕机不丢失。
六、数据表字段约束语法(建表配套规则)
所有约束用于限制字段数据合法性,分为字段级约束、表级约束:
PRIMARY KEY主键约束:字段唯一且非空,单张表仅允许 1 个主键;UNIQUE唯一约束:字段值不可重复,允许存在 1 条NULL记录;NOT NULL非空约束:字段插入数据时必须赋值,禁止为空;DEFAULT默认值约束:字段无赋值时,自动填充预设默认值;FOREIGN KEY外键约束:关联两张表字段,维护表之间数据完整性;CHECK检查约束(MySQL8.0 及以上完整支持):限定字段数值范围。
CHECK 约束语法示例
sql
七、学习复盘与问题总结
7.1 学习过程高频踩坑梳理
- 混淆
TRUNCATE与DELETE属性:误使用 TRUNCATE 清空测试表以外的数据,无事务回滚补救手段; 解决思路:区分 DDL/DML 语句属性,清空存量数据优先 DELETE; UPDATE/DELETE省略 WHERE 条件,触发全表操作; 解决思路:执行修改 / 删除前,先用 SELECT 校验过滤条件范围;- 字符集选用旧版 utf8,特殊字符、表情存储乱码; 解决思路:新建库、表统一指定 utf8mb4 字符集;
- 事务中执行 ALTER/CREATE 等 DDL,事务被自动提交,回滚失效; 解决思路:事务流程仅执行 SELECT/INSERT/UPDATE/DELETE,结构修改单独执行。
7.2 学习疑问与理论解答
疑问:事务隔离级别存在什么区别,如何调整?
解答:MySQL InnoDB 默认隔离级别为可重复读,共 4 级隔离级别,分别解决脏读、不可重复读、幻读三类并发问题; 查询当前隔离级别:SELECT @@transaction_isolation;修改会话隔离级别语法:SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别名称;
结语
本文完整覆盖课堂全部 SQL 标准语法,系统梳理了 DDL、DML、DCL、TCL 四大类 SQL 语句的通用语法结构、核心定义、使用规则与字段约束,清晰区分了四类语句的功能边界与适用场景,全面整理了日常学习与实操过程中的标准写法与高频通用踩坑点,适合数据库入门初学者用作通用学习资料