SQL的概念与发展 - 极客时间学习笔记
了解SQL
SQL的两个重要标准是SQL92和SQL99.
SQL语言的划分
- DDL,也叫Data Definition Language,也就是数据定义语言,用来定义数据库对象,包括数据库、数据表和列. 通过DDL,可以创建、删除和修改数据库和表结构
- DML,也叫Data Manipulation Language, 数据操作语言,用它来操作和数据库相关的记录,包括了增加、删除、修改数据表中的记录.
- DCL,也叫Data Control Language,数据控制语言,用来定义访问权限和安全级别.
- DQL,也叫Data Query Language,数据查询语言,用它来查询想要的记录,是SQL语言的重中之重,也是学习的重点.
SQL开始
SQL是我们与DBMS(数据库管理系统)交流的语言,在创建DBMS之前,需要对它进行设计,对于RDBMS(关系数据库管理系统)来说采用的是ER图(Entity Relationship Diagram),即实体-关系图的方式进行设计, ER图评审通过,再用SQL语句或者可视化管理工具(如Navicat)创建数据表.
实体 - 关系是描述现实世界的概念模型,该模型有三个要素: 实体、属性、 关系.
实体是需要管理的对象, 属性是标识每个实体的属性, 关系则是对象之间的关系.
SQL大小写的规范
- 表名、表别名、字段名、字段别名等都小写
- SQL保留字、函数名、绑定变量等都大写
SELECT name, hp_max FROM heros WHERE role_main = '战士'
DBMS的前世今生
DB、DBS和DBMS的区别
DBMS的英文全称是DataBase Management System,数据库管理系统,时机上是对多个数据库进行管理,所以可以理解为 DBMS = 多个数据库(DB) + 管理程序.
DB的英文是DataBase,也就是数据库.数据库是存储数据的集合,可以理解为多个数据表.
DBS的英文是DataBase System,数据库系统.是更大的概念,包括了数据库、数据库关系系统以及数据库管理人员DBA.
注意的是我们通常叫MySQL、Oracle等称之为数据库,准确的来说,他们应该是数据库管理系统,也就是DBMS.
排名前二十的DBMS
了解了DBMS的概念之后,当下主流的DBMS都有哪些? 看下图,是2019年5月DB-Engine公布的DBMS的排名:
排名可以看出,关系型数据库绝对是DBMS的主流,使用最多的DBMS分别是Oracle、MySQL和SQL Server.
关系型数据库(RDBMS)是建立在关系模型基础上的数据库,SQL就是关系型数据库的查询语言.
相对于SQL,NoSQL泛指非关系型数据库,包括了榜单上的键值型数据库数据库、文档型数据库、搜索引擎和列存储等,除此以外还包括图形数据库.
键值型数据库通过key-value键值的方式来存储数据,其中key和value可以是简单的对象,也可以是复杂的对象.key作为唯一标识符,有点事查找速度快,这方面明显优于关系型数据库,同事缺点也很明显,无法像关系型数据库一样自由使用条件过滤(比如WHERE),如果不知道去那里查找数据,就要遍历所有的键,需要消耗大量的计算.键值型数据库典型的使用场景就是作为内容缓存. Redis是最流行的键值型数据库.
文档型数据库用来管理文档,在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录,MongoDB是最流行的文档型数据库.
搜索引擎也是数据库检索中的重要应用,常见的全文搜索引擎有Elasticsearch、Splunk和Solr. 虽然关系型数据库采用了索引提升搜索效率,但是针对全文索引效率却极低.搜索引擎的优势在于采用了全文索引的技术,核心原理是"倒排索引".
列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列式存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限.
图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系.最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)来实现,特点在于能高效地解决复杂的关系问题.
SQL阵营和NoSQL阵营
NoSQL的分类很多,刚才提到的键值型、文档型、搜索引擎、列式存储和图形数据库等都属于NoSQL阵营.也只有用NoSQL一次才能将这些技术囊括进来.即使如此,在DBMS排名中,还是SQL阵营的比重更大,影响力前五的DBMS中有4个是关系型数据库,而排名前20的DBMS中也有12个是关系型数据库.所以说SQL还是非常重要的.
NoSQL的演变:
- 1970: NoSQL = We have no SQL
- 1980: NoSQL = Know SQL
- 2000: NoSQL = No SQL
- 2005: NoSQL = Not only SQLL
- 2013: NoSQL = No, SQL
NoSQL对SQL做了很好的补充,所以说NoSQL在当下的时代还是很重要的.
SQL阵营的DBMS
1979 年,Oracle 2 诞生,它是第一个商用的 RDBMS(关系型数据库管理系统),随后被卖给了军方客户。随着 Oracle 软件的名气越来越大,公司也改叫 Oracle 公司。20 世纪 90 年代,Oracle 的创始人埃里森成为继比尔·盖茨之后第二富有的人,可以说 IBM 缔造了两个帝国,一个是软件业的霸主微软,另一个是企业软件市场的霸主 Oracle。如今 Oracle 的年收入达到了 400 亿美金,足以证明商用数据库软件的价值。从这点我们也能看出,如果选择了一个大的赛道,就要尽早商业化,占据大型企业客户完全可以创建巨大的商业价值,也足以证明一个软件企业不需要靠卖硬件也可以挣到很多钱。
MySQL 是 1995 年诞生的开源数据库管理系统,因为免费开源的特性,得到了开发者的喜爱,用户量迅速增长,成为开源数据库的 No.1。但在发展过程中,MySQL 先后两次被易手,先是在 2008 年被 SUN 收购,然后在 2010 年 SUN 被 Oracle 收购,于是 Oracle 同时拥有了 MySQL 的管理权,至此 Oracle 在数据库领域中成为绝对的领导者。从这里我们也能看到,虽然 MySQL 是免费的产品,但是使用人数多,就足以证明巨大的用户价值。一个有巨大用户价值的产品,即使没有直接的商业价值,但作为基础设施也会被商业巨头看上。
不过在 Oracle 收购 MySQL 的同时,MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB,MariaDB 在绝大部分情况下都是与 MySQL 兼容的,并且增加了许多新的特性,比如支持更多的存储引擎类型。许多企业也由原来的 MySQL 纷纷转向了 MariaDB。
SQL Server 是微软开发的商业数据库,诞生于 1989 年。实际上微软还推出了 Access 数据库,它是一种桌面数据库,同时具备后台存储和前台界面开发的功能,更加轻量级,适合小型的应用场景。因为后台的存储空间有限,一般只有 2G,Access 的优势在于可以在前台便捷地进行界面开发。而 SQL Server 是大型数据库,用于后台的存储和查询,不具备界面开发的功能。从这里我们也能看出,即使 SQL 语言是通用的,但是为了满足不同用户的使用场景,会存在多个 DBMS。比如 Oracle 更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求,而 MySQL 更受到许多互联网公司,尤其是早期创业公司的青睐。
Oracle 作为市场占有率最高的商用数据库软件,适合大型的跨国企业,而针对轻量级的桌面数据库,我们采用 Access 就可以了。对于免费开源的产品来说,可以选用 MySQL 或者 MariaDB。同时在 NoSQL 阵营中,我们也需要了解键值型、文档型、搜索引擎、列式数据库和图形数据库的区别。