当前位置: 首页 > news >正文

【MySQL全套SQL语句完整归纳】DDL/DML/DCL/TCL语法规范、实战案例、易错点全整理】

1. 前言:SQL 四大分类整体概述

MySQL 中所有 SQL 语句按照功能划分为四大核心类别,是本学期课堂全部核心学习内容,数据库开发、运维、业务功能实现均围绕四类语句展开,下面通过表格清晰区分四类语言核心定位

本文整合课堂全部核心知识点、实战标准语法、避坑细节与完整可运行案例,适合期末复习、面试背诵、开发查阅,全文干货无废话,建议收藏。

2. DDL 数据定义语言(库、表、索引操作)

DDL 用于修改数据库、数据表、索引的结构,执行后会直接修改元数据,部分语句无法通过事务回滚,线上环境执行需要谨慎。

2.1 数据库操作语句

(1)创建数据库

标准语法:

sql

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集] [DEFAULT COLLATE 排序规则];

实战示例:

sql

-- 不存在则创建库,指定utf8mb4字符集(支持emoji表情) CREATE DATABASE IF NOT EXISTS student_db DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;

使用规范 & 易错点

  1. 必须添加IF NOT EXISTS,避免数据库已存在抛出异常;
  2. 禁止使用 MySQL 原生utf8,仅 3 字节编码无法存储表情符号;
  3. 数据库名称不能以数字开头、不能使用 MySQL 保留关键字(如 user、order)。
(2)查看、切换、删除数据库

sql

-- 查询本机所有数据库 SHOW DATABASES; -- 切换至目标数据库,后续操作默认作用于该库 USE student_db; -- 查看当前正在使用的数据库 SELECT DATABASE(); -- 删除数据库,IF EXISTS防止库不存在报错 DROP DATABASE IF EXISTS student_db;

⚠️ 踩坑提醒:DROP DATABASE会直接清空库内全部数据表与数据,生产环境禁止随意执行。

2.2 数据表操作语句

(1)创建数据表 CREATE TABLE

完整标准语法:

sql

CREATE TABLE [IF NOT EXISTS] 表名( 字段1 数据类型 约束条件 COMMENT '字段注释', 字段2 数据类型 约束条件 COMMENT '字段注释', 表级约束 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='表注释';

课堂实战学生表示例:

sql

CREATE TABLE IF NOT EXISTS student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生自增主键ID', stu_name VARCHAR(20) NOT NULL COMMENT '学生姓名,不能为空', age TINYINT DEFAULT 18 COMMENT '学生年龄,默认值18', class_id INT COMMENT '所属班级外键ID', create_time DATETIME DEFAULT NOW() COMMENT '数据创建时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';

规范要求

  1. 存储引擎统一指定InnoDB,唯一支持事务、外键约束;MyISAM 无事务能力;
  2. 所有表、字段必须添加COMMENT注释,便于后期维护阅读;
  3. AUTO_INCREMENT自增属性仅支持整数类型字段。
(2)修改表结构 ALTER TABLE

sql

-- 1.新增字段,指定插入在age字段后方 ALTER TABLE student ADD COLUMN email VARCHAR(50) AFTER age; -- 2.仅修改字段数据类型 ALTER TABLE student MODIFY COLUMN age SMALLINT; -- 3.修改字段名称+数据类型 ALTER TABLE student CHANGE COLUMN email stu_email VARCHAR(50); -- 4.删除指定字段 ALTER TABLE student DROP COLUMN stu_email; -- 5.修改数据表名称 ALTER TABLE student RENAME TO stu_info;

⚠️ 易错点:百万级数据大表直接执行 ALTER 会触发全表锁表,阻塞业务读写,线上需使用在线改表工具。

(3)删除表 & 清空表数据

sql

-- 删除整张表,表结构+内部数据全部清除 DROP TABLE IF EXISTS student; -- 仅清空表内数据,重置自增主键ID TRUNCATE TABLE student;

TRUNCATE 与 DELETE 核心区别

表格

对比项TRUNCATEDELETE
语句分类DDL 数据定义语言DML 数据操作语言
事务支持不支持,无法回滚支持事务,可 ROLLBACK 恢复
自增主键清空后重置为 1保留原有自增数值
执行效率速度极快,不记录单行日志逐条删除,大数据量效率低

2.3 索引操作语句

索引用于提升查询速度,但会降低插入、更新、删除性能,频繁修改的字段不建议建索引。

sql

-- 创建普通索引 CREATE INDEX idx_stu_name ON student(stu_name); -- 创建唯一索引(字段值全局不可重复) CREATE UNIQUE INDEX idx_stu_email ON student(email); -- 查看一张表全部索引 SHOW INDEX FROM student; -- 删除指定索引 DROP INDEX idx_stu_name ON student;

3. DML 数据操作语言(增删改查核心实战)

DML 是业务开发使用频率最高的语句,针对表内数据进行操作,支持事务回滚,日常开发必须严格规范 WHERE 条件,避免全表操作。

3.1 INSERT 新增数据

sql

-- 指定字段单条插入 INSERT INTO student(stu_name,age) VALUES('张三',19); -- 批量插入(推荐写法,单次IO效率更高) INSERT INTO student(stu_name,age) VALUES('李四',20),('王五',18); -- 查询其他表数据,批量插入本表 INSERT INTO stu_back(stu_name,age) SELECT stu_name,age FROM student WHERE age>=18;

易错点

  1. 字符串、日期类型数值必须包裹英文单引号;
  2. 批量插入单次数据不超过 1000 条,避免数据包超限报错;
  3. 自增主键字段无需手动赋值。

3.2 SELECT 查询语句(课堂重点,语法顺序固定不可颠倒)

完整标准语法顺序(考试高频考点)

sql

SELECT 要查询的字段列表 FROM 数据表 JOIN 关联表 ON 关联匹配条件 WHERE 行数据过滤条件 GROUP BY 分组统计字段 HAVING 分组后聚合过滤条件 ORDER BY 排序字段 [ASC/DESC] LIMIT 偏移量,展示条数;

分层实战案例:

sql

-- 基础条件查询 SELECT id,stu_name,age FROM student WHERE age >= 18 AND class_id = 2; -- 分组统计,HAVING过滤分组结果 SELECT class_id,COUNT(*) stu_num FROM student GROUP BY class_id HAVING stu_num > 5; -- 分页查询:第1页,每页10条数据 SELECT * FROM student LIMIT 0,10; -- 多表内连接,查询学生对应班级名称 SELECT s.stu_name,c.class_name FROM student s INNER JOIN class c ON s.class_id = c.id;

⚠️ 高频踩坑

  1. WHERE 子句不能使用 COUNT、SUM 等聚合函数,分组过滤必须写在 HAVING;
  2. 禁止日常开发使用SELECT *,仅查询业务所需字段,减少 IO 开销;
  3. LIMIT 偏移量过大时分页性能极差,推荐主键分页优化。

3.3 UPDATE 修改数据

语法规范:

sql

UPDATE 表名 SET 字段1=值1,字段2=值2 [WHERE 过滤条件];

实战示例:

sql

UPDATE student SET age=20 WHERE id=1;

💥 致命易错点:省略 WHERE 条件会更新全表所有数据,操作前必须先用 SELECT 校验过滤条件。

3.4 DELETE 删除数据

sql

DELETE FROM student WHERE id=1;

注意事项

  1. 无 WHERE 条件会清空全表数据,事务内可回滚恢复;
  2. DELETE 不会重置自增主键;
  3. 大批量数据删除建议分批执行,避免长时间锁表。
分类全称核心作用核心关键字
DDL数据定义语言创建 / 修改 / 删除数据库、数据表、索引,定义库表结构CREATE、ALTER、DROP、TRUNCATE
DML数据操作语言针对表内数据完成新增、查询、修改、删除,业务开发核心INSERT、SELECT、UPDATE、DELETE
DCL数据控制语言创建数据库登录用户、分配 / 回收访问权限,负责数据库安全CREATE USER、GRANT、REVOKE
TCL事务控制语言保障多步数据操作一致性,管理事务提交、回滚(仅 InnoDB 支持)BEGIN、COMMIT、ROLLBACK、SAVEPOINT

4. DCL 数据控制语言(用户与权限管理)

DCL 用于管理数据库登录账号与访问权限,属于运维操作范畴,用于管控不同开发人员的数据访问范围。

4.1 创建、删除数据库用户

sql

-- 创建用户,%代表任意IP均可登录 CREATE USER 'school_user'@'%' IDENTIFIED BY '123456'; -- 删除指定用户 DROP USER IF EXISTS 'school_user'@'%';

4.2 授权与回收权限

sql

-- 授予school_db库所有表全部操作权限 GRANT ALL ON school_db.* TO 'school_user'@'%'; -- 仅授予查询权限,限制修改、删除操作 GRANT SELECT ON school_db.* TO 'school_user'@'%'; -- 回收用户全部权限 REVOKE ALL ON school_db.* FROM 'school_user'@'%'; -- 刷新权限,使修改立即生效 FLUSH PRIVILEGES;

⚠️ 易错点:权限修改后必须执行FLUSH PRIVILEGES,否则权限不生效;生产环境不建议使用%通配 IP,缩小访问范围保障数据库安全。

5. TCL 事务控制语言(仅 InnoDB 引擎支持)

事务用于保证一组 DML 操作要么全部执行成功,要么全部撤销,满足 ACID 四大特性,订单、转账、库存扣减等强一致性业务必须使用事务。

完整事务语法

sql

-- 开启事务 BEGIN; -- 执行数据修改操作 UPDATE student SET age=21 WHERE id=2; -- 创建保存点,支持局部回滚 SAVEPOINT save1; DELETE FROM student WHERE id=3; -- 回滚到保存点,仅撤销删除操作 ROLLBACK TO save1; -- 全部回滚,撤销所有未提交操作 ROLLBACK; -- 提交事务,数据永久写入数据库 COMMIT;

使用规范

  1. MyISAM 引擎不支持事务;
  2. 事务内执行 CREATE、ALTER 等 DDL 语句会自动提交事务,造成数据错乱;
  3. 会话关闭未执行 COMMIT,事务会自动回滚,数据丢失。

6. 拓展语法:子查询、视图、聚合函数

6.1 子查询(IN/EXISTS)

sql

-- IN子查询:查询计算机1班全部学生 SELECT * FROM student WHERE class_id IN (SELECT id FROM class WHERE class_name='计算机1班');

6.2 视图 VIEW(封装常用多表查询)

sql

-- 创建视图,封装学生+班级关联查询 CREATE VIEW v_stu_class AS SELECT s.*,c.class_name FROM student s LEFT JOIN class c ON s.class_id=c.id; -- 调用视图查询 SELECT * FROM v_stu_class; -- 删除视图 DROP VIEW IF EXISTS v_stu_class;

6.3 常用聚合函数

COUNT()统计行数、SUM()求和、AVG()平均值、MAX()最大值、MIN()最小值

sql

-- 统计班级学生总数、平均年龄 SELECT class_id,COUNT(*) total,AVG(age) avg_age FROM student GROUP BY class_id;

7. 全语句高频易错点汇总(个人学习踩坑总结)

DDL 类踩坑

  1. 建表忘记指定 InnoDB 引擎,后续无法使用事务、外键;
  2. 库名、表名使用中文、关键字,直接触发语法报错;
  3. 线上大表直接执行 ALTER,长时间锁表阻塞业务读写。

DML 类踩坑

  1. UPDATE/DELETE 遗漏 WHERE 条件,全表数据被批量修改 / 删除;
  2. 查询使用SELECT *,读取大量无用字段降低查询速度;
  3. 批量 INSERT 一次性写入上万条数据,触发数据包溢出报错。

TCL 事务踩坑

  1. 事务中执行建表、改表 DDL 语句,自动提交事务导致数据错乱;
  2. 操作完成忘记 COMMIT,关闭会话后数据全部丢失。

DCL 权限踩坑

  1. 用户登录地址设置为%,存在数据库入侵安全风险;
  2. 授权后未执行 FLUSH PRIVILEGES,新权限不生效。

8. 综合实战:学生管理系统完整可运行 SQL 脚本

整合建库、建表、插入、关联查询、事务完整代码,本地 Navicat 可直接复制执行复现:

sql

-- 1.创建数据库 CREATE DATABASE IF NOT EXISTS school_db DEFAULT CHARSET utf8mb4; USE school_db; -- 2.创建班级表 CREATE TABLE class( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '班级id', class_name VARCHAR(30) NOT NULL COMMENT '班级名称' ) ENGINE=InnoDB COMMENT='班级信息表'; -- 3.创建学生表 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, stu_name VARCHAR(20) NOT NULL, age TINYINT DEFAULT 18, class_id INT ); -- 4.插入测试数据 INSERT INTO class(class_name) VALUES('计算机1班'),('计算机2班'); INSERT INTO student(stu_name,age,class_id) VALUES('小明',19,1),('小红',18,2); -- 5.多表关联查询 SELECT s.stu_name,c.class_name FROM student s JOIN class c ON s.class_id=c.id; -- 6.事务修改学生年龄 BEGIN; UPDATE student SET age=20 WHERE id=1; COMMIT;

9. 个人学习复盘、现存疑问与提升计划

学习收获

  1. 完整梳理课堂全部 SQL 语句,清晰区分 DDL/DML/DCL/TCL 四大类语言核心用途;
  2. 彻底分清 TRUNCATE、DELETE、DROP 三者本质区别,规避线上删库删表风险;
  3. 掌握事务 ACID 四大特性,能够在订单、转账场景合理使用事务保证数据一致性;
  4. 明确自身薄弱板块:复杂多表联查、索引优化、慢 SQL 调优掌握不足,后续重点练习 Explain 执行计划。

现存学习疑问

  1. 百万级大数据表分页查询,如何优化 LIMIT 大偏移量带来的性能问题?
  2. 联合索引遵循最左匹配原则,遇到范围查询时索引失效有什么解决方案?
  3. 线上大表如何无锁执行 ALTER 修改表结构,避免阻塞线上业务?

后续提升计划

  1. 系统学习 Explain 执行计划,分析慢查询根源;
  2. 实操联合索引、覆盖索引优化案例;
  3. 学习 pt-online-schema-change 在线改表工具,解决大表 DDL 锁表问题。

10. 参考官方文档

  1. MySQL 8.0 官方开发文档:https://dev.mysql.com/doc/
  2. MySQL 中文开发手册
  3. CSDN 数据库实训专栏实战教程
http://www.jsqmd.com/news/1094513/

相关文章:

  • 金融监管总局AI安全新规解读:证券金融AI软件行业如何落地合规
  • GPU内存稳定性终极检测指南:如何用memtest_vulkan快速排查显卡硬件故障
  • GPT-5.5 到底值不值得升级?从实际开发角度分析
  • Burjeel Holdings为自2018年以来MENA首只医疗保健伊斯兰债券定价,超额认购3.2倍
  • GLM 5.2 深度技术解析:开源模型在网络安全基准测试中击败 Claude,每次漏洞发现仅 $0.17
  • 2026年AI写作辅助网站核心能力速览
  • 【资深架构师亲授】ChatGPT机器人生产环境避坑手册:5类致命错误+4种监控指标+实时告警配置
  • 前端这边不做过多赘述,页面图给出来,大概是一个h5页面配合vant组件先把页面实现即可
  • OpenAI高级推理模型的推理轨迹深度解析与工程实践
  • 专业的福州设计考研机构哪家靠谱
  • 【CTF 备赛干货】2026 最新 CTF 比赛全方位指南,剖析竞赛新风向、整理值得参加的赛事,系统化备考路线助力轻松冲奖
  • 计算机毕业设计之jsp电力资源服务平台
  • PS 如何抠图?5 种全场景无痕抠图完整实操教程
  • 专访 Mainline 作者们:聊聊从代码协作到意图协作
  • 信息学奥赛解题实战:最长单词2的三种高效解法与输入技巧
  • Kazumi:基于自定义规则的跨平台番剧采集器终极指南
  • 【ChatGPT API安全合规白皮书】:GDPR/CCPA双认证下敏感数据处理的5层防护架构设计
  • MLP-Mixer:用全连接层重构视觉理解的架构革命
  • 养慢虾哲学:无心插柳— GTX 960 竟成 P104 矿卡的“PCIe 涡轮增压”
  • 胖头鱼的技术专栏-436 AI时代需要怎样的数据库?今天这场直播也许给出了答案(20260629)
  • 《源纹天书》第96-100章:池化道场的奥秘——从线程复用说到异步非阻塞
  • A100、H100、H20算力租赁怎么选?企业级GPU选型指南
  • 批量更改BOM组件不参与成本计算-CEWB
  • GPT-4动态稀疏激活:2%参数如何驱动万亿级智能
  • Python PDF 解析入门:提取信息、表格与元数据
  • MIMIC-IV数据库实战:从数据表解析到临床研究场景构建
  • 3分钟搞定M3U8视频下载:告别在线观看限制的高效工具
  • 34 年匠心造好机,大连欣科蜂窝板生产线实力稳居区域第一
  • 办公提效工具 OpenClaw 安装全流程,部署报错统一处理方案(含安装包)
  • 面向真实科研场景,构建由Codex、Claude Code、OpenClaw、Hermes四位“AI研究员“组成的可迭代、可迁移的科研协作团队