MySQL 系统学习 第二阶段 SQL(Structured Query Language)

第二阶段 SQL(Structured Query Language)

本阶段目标

学完这一阶段,你应该能够回答:

  • SQL 是什么?
  • SQL 为什么是标准语言?
  • SQL 有哪几种分类?
  • DDL、DML、DQL、DCL 分别负责什么?
  • 一条 SQL 是如何执行的?(先建立概念)

第一章 什么是 SQL?

SQL 全称:

Structured Query Language

中文:

结构化查询语言

注意:

SQL 不是 MySQL 发明的。

SQL 是一种国际标准语言。

就像:

复制代码
复制代码
HTML

CSS

JavaScript

是一种标准一样。

SQL 也是标准。


例如:

你学习 MySQL:

复制代码
复制代码
SELECT * FROM user;

到了 PostgreSQL:

复制代码
复制代码
SELECT * FROM user;

Oracle:

复制代码
复制代码
SELECT * FROM user;

基本还是一样。

这就是:

SQL 是标准。


为什么叫"结构化"?

因为 SQL 必须按照固定的语法来写。

例如:

正确:

复制代码
复制代码
SELECT name
FROM user
WHERE age > 18;

错误:

复制代码
复制代码
FROM user
SELECT name;

SQL 有固定结构,所以叫:

Structured(结构化)。


第二章 SQL 能干什么?

SQL 可以完成数据库中的几乎所有操作。

例如:

创建数据库:

复制代码
复制代码
CREATE DATABASE school;

创建表:

复制代码
复制代码
CREATE TABLE student (...);

插入数据:

复制代码
复制代码
INSERT INTO student VALUES (...);

查询:

复制代码
复制代码
SELECT * FROM student;

修改:

复制代码
复制代码
UPDATE student
SET age = 20
WHERE id = 1;

删除:

复制代码
复制代码
DELETE FROM student
WHERE id = 1;

授权:

复制代码
复制代码
GRANT ...

所以:

SQL 就是数据库的"语言"。


第三章 SQL 的四大分类

这是面试必问。

SQL 可以分成四类:

复制代码
复制代码
SQL
│
├── DDL
├── DML
├── DQL
└── DCL

记忆口诀:

建(DDL)→ 改数据(DML)→ 查(DQL)→ 管权限(DCL)


第一类:DDL(Data Definition Language)

中文:

数据定义语言

关键词:

定义数据库结构。

DDL 操作的是:

  • 数据库
  • 表
  • 字段
  • 索引(后面学习)

不会操作数据。

例如:

创建数据库:

复制代码
复制代码
CREATE DATABASE school;

创建表:

复制代码
复制代码
CREATE TABLE student (
    id INT,
    name VARCHAR(20)
);

修改表:

复制代码
复制代码
ALTER TABLE student
ADD age INT;

删除表:

复制代码
复制代码
DROP TABLE student;

可以理解成:

装修房子。

例如:

房子:

复制代码
复制代码
客厅

卧室

厨房

DDL 做的是:

复制代码
复制代码
增加卧室

拆厨房

修改卫生间

它改变的是:

结构。


第二类:DML(Data Manipulation Language)

中文:

数据操作语言

注意:

DDL 改的是:

复制代码
复制代码
房子的结构

DML 改的是:

复制代码
复制代码
房子里面的人

例如:

student

原来:

id name
1 Tom

新增:

复制代码
复制代码
INSERT INTO student
VALUES (2,'Jack');

修改:

复制代码
复制代码
UPDATE student
SET name='Lucy'
WHERE id=2;

删除:

复制代码
复制代码
DELETE FROM student
WHERE id=2;

所以:

DML:

操作的是:

数据。


第三类:DQL(Data Query Language)

这是工作中使用最多的。

DQL:

只有一个核心:

复制代码
复制代码
SELECT

例如:

查询全部:

复制代码
复制代码
SELECT *
FROM student;

查询名字:

复制代码
复制代码
SELECT name
FROM student;

条件查询:

复制代码
复制代码
SELECT *
FROM student
WHERE age > 18;

以后:

工作 70%~80% 的 SQL:

都是:

复制代码
复制代码
SELECT

后面的:

JOIN

GROUP BY

ORDER BY

LIMIT

都是:

SELECT 的扩展。


第四类:DCL(Data Control Language)

中文:

数据控制语言

负责:

权限。

例如:

创建用户:

复制代码
复制代码
CREATE USER ...

授权:

复制代码
复制代码
GRANT

撤销:

复制代码
复制代码
REVOKE

删除用户:

复制代码
复制代码
DROP USER

一般:

DBA 用得比较多。

普通开发:

偶尔会用。


四大分类总结

分类 全称 操作对象 常见命令 举例
DDL Data Definition Language 数据库、表、字段 CREATE、ALTER、DROP、TRUNCATE 创建数据库、创建表、修改表结构
DML Data Manipulation Language 表中的数据 INSERT、UPDATE、DELETE 新增、修改、删除记录
DQL Data Query Language 数据查询 SELECT 查询数据、排序、分页、分组
DCL Data Control Language 权限与用户 GRANT、REVOKE、CREATE USER 用户授权、权限管理

第四章 SQL 的执行过程(建立概念)

现在先不用记住细节,只建立一个整体印象。

当你写:

复制代码
复制代码
SELECT * FROM student;

MySQL 大致会经历:

复制代码
复制代码
SQL
 │
 ▼
连接 MySQL
 │
 ▼
语法解析
 │
 ▼
检查是否有 student 表
 │
 ▼
生成执行计划
 │
 ▼
读取数据
 │
 ▼
返回结果

以后我们学习:

  • 解析器
  • 优化器
  • 执行器
  • InnoDB

就是在讲:

这一条 SQL:

到底经历了什么。


第五章 为什么 SQL 如此重要?

以后:

NestJS:

复制代码
复制代码
await userRepository.find()

看起来:

没有 SQL。

实际上:

ORM 会生成:

复制代码
复制代码
SELECT *
FROM user;

所以:

ORM 只是帮你写 SQL。

真正执行的:

仍然是:

SQL。

因此:

一个优秀的后端工程师,不仅要会用 ORM,更要能读懂和编写 SQL。


本阶段知识导图

复制代码
复制代码
SQL
│
├── SQL 是什么
│
├── SQL 是国际标准
│
├── 四大分类
│      ├── DDL(定义结构)
│      ├── DML(操作数据)
│      ├── DQL(查询数据)
│      └── DCL(权限管理)
│
└── SQL 执行流程(初步认识)

本章思考题

在进入下一节之前,建议你先回答这几个问题:

  1. SQL 为什么被称为"结构化查询语言"?
    SQL 被称为结构化查询语言(Structured Query Language),因为它必须按照固定的语法结构来编写,不能随意调整关键字顺序
  2. DDL 和 DML 的本质区别是什么?请分别举两个例子。
    DDL 修改的是数据库对象(结构),DML 修改的是数据库对象中的数据。
  3. 为什么 SELECT 被单独归类为 DQL,而不是 DML?
    因为 SELECT 只负责查询数据,不会修改数据内容,而 DML 的核心职责是对数据进行新增、修改和删除。为了体现"读"和"写"的区别,数据库将 SELECT 单独归类为 DQL。
  4. 如果要删除一张表,应该使用哪一类 SQL?如果只是删除表中的一条数据,又属于哪一类?
    删除整张表属于 DDL,因为删除的是数据库对象;删除表中的一条记录属于 DML,因为删除的是数据,而不是表结构。
  5. 为什么学习了 ORM(如 TypeORM、Prisma)之后,仍然需要学习 SQL?
    ORM 的作用是提高开发效率,它会把代码转换成 SQL,但数据库最终执行的仍然是 SQL。当出现性能问题、复杂查询或需要优化索引时,开发者必须理解 SQL,才能分析执行计划、优化查询和解决问题。因此,ORM 不能代替 SQL,它只是 SQL 的高级封装。
相关推荐
小白男神4 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶4 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G4 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备4 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远4 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客4 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安4 天前
MySQL-触发器
数据库·mysql