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 的高级封装。
相关推荐
数据库小学妹6 小时前
国产数据库怎么选?兼容、迁移、核心案例与融合架构四道关
数据库·架构·国产数据库·数据库迁移·融合数据库
IvorySQL7 小时前
PostgreSQL 日报| PgBouncer 修复三个 CVE 漏洞(10 月 15 日)
数据库·postgresql·区块链
饺子大魔王的男人7 小时前
后台表格、查询、流程总在重复写?我用ToolJet把PostgreSQL直接做成可远程访问的业务系统
数据库·postgresql
Gauss松鼠会7 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
杨云龙UP8 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
AOI小白新手上路8 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
凯歌的博客9 小时前
DuckDB 是一款进程内的分析型数据库
数据库·ai编程
dishugj9 小时前
Oracle物理体系结构
数据库·oracle
北亚数据恢复9 小时前
【数据库数据恢复】NDF文件变0KB、数据库损坏?超大数据库数据恢复案例
数据库·oracle