1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SQL必知必会 | 1

SQL必知必会 | 1

时间:2023-08-16 14:55:10

相关推荐

SQL必知必会 | 1

一、了解SQL:一门半衰期很长的语言

数据库管理系统,例如MySQL、Oracle等的语言,最具有中台能力的语言便是SQL。自从加入TIOBE编程语言排行榜,就一直保持在Top 10。

1.技术人员、产品经理、运营人员都需要掌握SQL。

2.从诞生到现在,很少变化。

3.SQL入门并不难。

1.DDL,英文叫做 Data Definition Language,也就是数据定义语言,它用来定义我们的数

据库对象,包括数据库、数据表和列。通过使用 DDL,我们可以创建,删除和修改数据库

和表结构。

2.DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库

相关的记录,比如增加、删除、修改数据表中的记录。

3.DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和安

全级别。

4. DQL,英文叫做 Data Query Language,数据查询语言,我们用它查询想要的记录,它是

SQL 语言的重中之重。在实际的业务中,我们绝大多数情况下都是在和查询打交道,因此

学会编写正确且高效的查询语句,是学习的重点。

SELECT name, hp_max FROM heros WHERE role_main = '战士’

从heros表,查找role_main字段为’战士’的名称和最大生命值

1.表名、表别名、字段名、字段别名等都小写;

2.SQL 保留字、函数名、绑定变量等都大写。

二、DBMS的前世今生

两个 IBM 研究员在 1974 年发表了一篇有关结构化英语查询语言的论文,

并将这门语言命名为 SEQUEL。SEQUEL 的语言标准是开放的,但是围绕它的商业化竞争却从来没有停止过。首先因为商标之争,SEQUEL 改名为 SQL,后来有一个重量级的公司基于那篇

论文研发出了商业化的数据库管理软件,这就是 Oracle。自此之后,又诞生了一堆大家熟知

的 DBMS,比如 MySQL、SQL Server、PostgreSQL、DB2 和 MongoDB 等。

DBMS 的英文全称是 DataBase Management System,数据库管理系统,实际上它可以对

多个数据库进行管理,所以你可以理解为 DBMS = 多个数据库(DB) + 管理程序。

DB 的英文是 DataBase,也就是数据库。数据库是存储数据的集合,你可以把它理解为多个

数据表。

DBS 的英文是 DataBase System,数据库系统。它是更大的概念,包括了数据库、数据库管理系统以及数据库管理人员 DBA。

.5 DB-Engine公布的DBMS排名

关系型数据库(RDBMS)就是建立在关系模型基础上的数据库,SQL 就是关系型数据库的查

询语言。相比于 SQL,NoSQL 泛指非关系型数据库,包括了榜单上的键值型数据库、文档型数据库、搜索引擎和列存储等,除此以外还包括图形数据库。

Redis是最流行的键值型数据库。

MongoDB是最流行的文档型数据库。

Elasticsearch、Splunk、Solr是常见的全文搜索引擎,核心原理是”倒排索引“。

1979年,Oracle 2 诞生,第一个商用的RDBMS,随后被卖给军方。随着名气越来越大,公司改名叫Oracle公司。

MySQL是1995年诞生的开源数据库管理系统,发展过程中,被SUN收购,被Oracle收购。其创造者担心MySQL有闭源的风险,创建了MySQL的分支项目MariaDB,绝大部分情况下与MySQL兼容。

SQL Server是微软于1989年开发的商业数据库。

如果说不同的 DBMS 代表了不同公司的利益,那么作为使用者的我们更应该注重的是这些

DBMS 的使用场景。比如 Oracle 作为市场占有率最高的商用数据库软件,适合大型的跨国企业,而针对轻量级的桌面数据库,我们采用 Access 就可以了。对于免费开源的产品来说,可以选用 MySQL 或者 MariaDB。同时在 NoSQL 阵营中,我们也需要了解键值型、文档型、搜索引擎、列式数据库和图形数据库的区别。

三、学会用数据库的方式思考SQL是如何执行的

SQL在Oracle中的执行:

1.语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。

2.语义检查:检查 SQL 中的访问对象是否存在。比如我们在写 SELECT 语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证 SQL 语句没有错误。

3.权限检查:看用户是否具备访问该数据的权限。

4.共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存 SQL 语句和该语句的执行计划。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析。那软解析和硬解析又该怎么理解呢?

5.优化器:优化器中就是要进行硬解析,也就是决定怎么做,比如创建解析树,生成执行计划。

6.执行器:当有了解析树和执行计划之后,就知道了 SQL 该怎么被执行,这样就可以在执行器中执行语句了。

SQL在MySQL中的执行:

1.连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;

2.SQL 层:对 SQL 语句进行查询处理;

3.存储引擎层:与数据库文件打交道,负责数据的存储和读取。

其中SQL层的结构:

1.查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。需要说明的是,因为查询缓存往往效率不高,所以在MySQL8.0 之后就抛弃了这个功能。

2.解析器:在解析器中对 SQL 语句进行语法分析、语义分析。

3.优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索,还是根据索引来检索等。

4.执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行 SQL 查询并返回结果。在 MySQL8.0 以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。

SQL语句 -> 缓存查询 -> 解析器 -> 优化器 -> 执行器

MySQL的存储引擎采用插件的形式,每个存储引擎都面向一种特定的数据库应用环境。开源的MySQL还允许开发人员设置自己的存储引擎,下面是一些常见的存储引擎:

1.InnoDB 存储引擎:它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等。

2.MyISAM 存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少。

3.Memory 存储引擎:使用系统内存作为存储介质,以便得到更快的响应速度。不过如果mysqld 进程崩溃,则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使用Memory 存储引擎。

4.NDB 存储引擎:也叫做 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。

5.Archive 存储引擎:它有很好的压缩机制,用于文件归档,在请求写入时会进行压缩,所以也经常用来做仓库。

需要注意的是,数据库的设计在于表的设计,而在 MySQL 中每个表的设计都可以采用不同的存储引擎,我们可以根据实际的数据处理需要来选择存储引擎,这也是 MySQL 的强大之处。

我们通过以下命令判断profiling是否开启:

mysql> select @@profiling;

0代表关闭,1代表打开,通过以下命令打开

mysql> set profiling=1;

如果我们想获取上一次查询的执行时间,可以使用:

mysql> show profile;

查询指定的ID:

mysql> show profile for query 2;

查看MySQL的版本情况:

mysql> select version();

Oracle 提出了共享池的概念,通过共享池来判断是进行软解析,还是硬解析。而在 MySQL 中,8.0 以后的版本不再支持查询缓存,而是直接执行解析器→优化器→执行器的流程,这一点从 MySQL 中的show profile 里也能看到。同时 MySQL 的一大特色就是提供了各种存储引擎以供选择,不同的存储引擎有各自的使用场景,我们可以针对每张表选择适合的存储引擎。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。