----------------------------在职场上的价值取决于别人依赖我们的程度,而不是我们依赖别人的程度---------------------------
学习路径
要想写出高性能的 SQL,首先要了解它的原理,其次就是做大量的练习。
- 先掌握基本的 DDL、DML、DCL 和 DQL 语法
- 再了解不同的 DBMS 中的 SQL 语法差异,
- 然后再来看如何优化,提升 SQL 的效率。
SQL简介
DDL,英文叫做 Data Definition Language | 也就是数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列 | 通过使用 DDL,我们可以创建,删除和修改数据库和表结构 |
---|---|---|
DML | 英文叫做 Data Manipulation Language,数据操作语言 | 增加、删除、修改数据表中的记录 |
DCL,英文叫做 Data Control Languag | 数据控制语言 | 我们用它来定义访问权限和安全级别 |
QL,英文叫做 Data Query Language,数据查询语言 | 在实际的业务中,我们绝大多数情况下都是在和查询打交道,因此学会编写正确且高效的查询语句,是学习的重点。 | 我们用它查询想要的记录 |
DBMS 的排名(2019 年 5 月 DB-Engines 公布)
NoSQL 的分类很多,刚才提到的键值型、文档型、搜索引擎、列式存储和图形数据库等都属于 NoSQL 阵营。也只有用 NoSQL 一词才能将这些技术囊括进来。即便如此,在 DBMS 排名中,还是 SQL 阵营的比重更大,影响力前 5 的 DBMS 中有 4 个是关系型数据库,而排名前 20 的 DBMS 中也有 12 个是关系型数据库。所以说,掌握 SQL 是非常有必要的。
ER 图(Entity Relationship Diagram)
即实体 - 关系图的方式进行设计。实体 - 关系图有什么用呢?它是我们用来描述现实世界的概念模型,在这个模型中有 3 个要素:实体、属性、关系。
大小写
不影响SQL的运行,但是有规范:
- 表名、表别名、字段名、字段别名等都小写;
- SQL 保留字、函数名、绑定变量等都大写。
SQL是如何执行的
Oracle 中的 SQL 是如何执行的
MySQL 中的 SQL 是如何执行的
- 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
- SQL 层:对 SQL 语句进行查询处理;
- 存储引擎层:与数据库文件打交道,负责数据的存储和读取。
相同的地方在于 Oracle 和 MySQL 都是通过解析器→优化器→执行器这样的流程来执行 SQL 的。
但 Oracle 和 MySQL 在进行 SQL 的查询上面有软件实现层面的差异。
Oracle 提出了共享池的概念,通过共享池来判断是进行软解析,还是硬解析。而在 MySQL 中,8.0 以后的版本不再支持查询缓存,而是直接执行解析器→优化器→执行器的流程,这一点从 MySQL 中的 show profile 里也能看到。同时 MySQL 的一大特色就是提供了各种存储引擎以供选择,不同的存储引擎有各自的使用场景,我们可以针对每张表选择适合的存储引擎。