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 的高级封装。
相关推荐
Mr.朱鹏5 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng15 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
云贝贝贝5 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
wxwx_bscxy3225 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向6 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却7 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO9 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记9 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数9 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全