七的博客

PostgreSQL11快速入门(三)-SQL标准与主流数据库差异

PostgreSQL

PostgreSQL11快速入门(三)-SQL标准与主流数据库差异

在正式学习 PG 前,有必要了解一下 SQL 的定义、 SQL 标准以及 PG 与其他主流关系型数据库在实现 SQL 标准方面的差异。这可以让更好的理解 PG 的特点和优势, 同时也能够知道为什么要选择 PG 来作为生产数据库。

1. SQL 是什么

SQL 是 Structured Query Language 的缩写 , 意思是结构化查询语言。它是一种专门用于与数据库通信的语言,几乎所有的关系型数据库都支持 SQL。

SQL 的历史可以追溯到 20 世纪 70 年代。当时, IBM 的研究员 Donald D. Chamberlin 和 Raymond F. Boyce 首次提出了 SEQUEL(Structured English Query Language) 的概念 , 这是 SQL 的前身。后来,SEQUEL 不断发展和完善 , 最终演变成了我们现在使用的 SQL。

先来看一个简单的 SQL 样例:

SELECT * FROM blog_data;

上面就是一条 SQL 语句,看着不是很复杂的样子。这个语句会返回 blog_data 表中的所有数据。其中 , 星号 (*) 表示所有列。具体的语法后面的章节将会详细讲述,这里先不用深究语法。

所以简单的讲,SQL 就是:

  • 指的是结构化查询语言 (Structured Query Language),主要用于用于管理关系数据库管理系统。
  • 通过 SQL 可以让我们访问数据库以及操作数据库。
  • 是一种 美国国家标准化组织 计算机语言 ( 跟 C/C++、Java 等一样都是编程语言 )。
  • 是一种标准定义,所以会有各种各样的实现。

2. SQL 可以干什么

SQL 主要是用来访问数据库以及操作数据库的,总结下它的作用有:

  • 向数据库发送执行查询。
  • 从数据库查询数据。
  • 往数据库新增数据。
  • 更新数据库中已存在的数据。
  • 删除数据库的数据。
  • 创建数据库对象,包括数据库表、视图、存储过程等等。

3. SQL 标准是什么

SQL语言最早由 IBM 研发,并在1986年由美国国家标准学会(ANSI)正式作为一个标准发布。

随后,国际标准化组织(ISO)也采纳了这一标准。标准的存在确保了不同的数据库厂商在实现产品的时候能够有一定程度的兼容性,大家都支持基本的语法,然后在这个基础上大家去实现各自的特色功能。

也就是因为各数据库的特色功能实现,就产生了所谓的 “方言”,这些往往是不同数据库产品间不兼容的根源。同时 SQL 标准也在迭代多个版本后,变得非常的臃肿。 我们平时说的 SQL 标准大部分只是前几个版本中的一些核心的部分。

标准的一部分文档是可以从 ISO 网站 https://www.iso.org/standard/76583.html 进行下载的,不过新版本的文档是收费的,老版本有一部分是支持免费阅读的。(换算成人民币的话差不多几千块钱一份了)

SQL 标准的发展经历了多个版本 , 主要包括以下几点 ( 从维基里面复制 ):

  1. SQL-86(1986 年):第一个 SQL 标准,也称为 SQL1。
  2. SQL-89(1989 年):对 SQL-86 进行了修订和扩展,这个版本也称为ANSI SQL 89。
  3. SQL-92(1992 年):也称为 SQL2,引入了许多新特性,如连接、视图等。
  4. SQL:1999(1999 年):也称为 SQL3,引入了面向对象的特性,如用户定义类型等。
  5. SQL:2003(2003 年):引入了 XML 支持、窗口函数等新特性。
  6. SQL:2008(2008 年):引入了 INSTEAD OF 触发器、ORDER BY 子句等新特性。
  7. SQL:2011(2011 年):引入了时态数据支持、调用语句等新特性。

4. 各数据库对 SQL 标准的支持

由于各种商业竞争和技术发展的需求,很多数据库都开发了超出标准的独特功能。这里我们对比下国内一些比较常见的关系型数据库,包括商业版的 Oracle 数据库、 开源的PostgreSQL 以及MySQL 数据库。

这三种数据库在国内的应用市场应用是相对广泛的,比如 Oracle 在一些银行、金融、证券、电力等等行业,基本是垄断的存在。但由于是按核心收费,所以一般的公司不一定愿意花这个高价进行采购。Oracle 对 SQL 标准的支持非常全面 , 几乎支持所有 SQL-92 和 SQL:1999 标准, 以及大部分 SQL:2003、SQL:2008 和 SQL:2011 标准。在实现标准上, Oracle 家一直是舍得投入精力的。

为了不想出这笔数据库的采购费用,于是很多公司就盯上了 MySQL 。MySQL 源码是可以直接获取到的,有性能问题就可以搭建集群来解决,所以 MySQL 在国内很流行。在实现 SQL 标准方面的支持相对较弱, 主要是支持 SQL-92 标准和部分 SQL:1999 标准。

有些公司想在 Oracle 的性能跟 MySQL 的灵活免费之间取个平衡,于是就开始盯上了 PostgreSQL 。PostgreSQL 在性能跟成本之间比较平衡,首先作为一个开源的软件,它支持对源代码进行二次开发。同时在性能以及语法上,跟 Oracle 又能比较接近。当然一个开源数据库想要完全达到商业数据库的性能的话,那肯定还是不太现实的。作为一个学院派的数据库,PostgreSQL 高度兼容 SQL 标准, 支持大部分 SQL-92 和 SQL:1999 标准, 以及部分 SQL:2003、SQL:2008 和 SQL:2011 标准。

这么一对比下来,又想用免费的数据库,又想数据库尽可能的实现标准 SQL ,那么 PostgreSQL 就是个比较好的选择了。

5. 各数据库优缺点

挑选一个生产项目用的数据库,自然不能主要看它实现 SQL 标准的程序。 说到底还是要综合考量,选择一个最合适自己项目的。下面简单的对几个数据库的优缺点做个对比:

5.1 Oracle 的优势和特点

Oracle 是一个功能强大、性能卓越的商业数据库系统,具有以下优势和特点:

  • 对 SQL 标准支持全面,兼容性好。

  • 提供了丰富的高级特性,如分析函数、物化视图等。

  • 具有强大的事务处理和数据一致性保证。

  • 提供了完善的安全机制,如细粒度的权限控制、数据加密等。

  • 性能优异,支持大规模数据处理和复杂查询,Oracle 数据库很多情况下,你的 SQL 写的很烂,它很多时候都可以帮你重写然后执行的很快。

  • 提供了丰富的管理和监控工具,易于维护和优化。这块也是 Oracle 数据的一大特色,在所有的数据库中,基本属它的监控做的最好最直观了。

5.2 MySQL 的优势和特点

MySQL 是一个轻量级、易用、高性能的开源数据库系统,具有以下优势和特点:

  • 简单易学, 入门门槛低。

  • 性能优异,特别适合于 Web 应用场景。

  • 开源免费,拥有广泛的用户基础,主要还是靠着 PHP 起家。

  • 提供了丰富的存储引擎选择,如 InnoDB、MyISAM 等。

  • 体积小 , 资源占用少。

5.3 PostgreSQL 的优势和特点

相比于其他数据库系统,PostgreSQL 具有以下优势和特点:

  • 高度兼容 SQL 标准,可移植性强。

  • 功能强大,支持复杂查询和数据处理。

  • 可扩展性好,支持多种编程语言和插件。

  • 安全性高 , 提供了角色和权限管理、数据加密等特性。这点 MySQL 是没有的,MySQL 的权限管理非常的简单。

  • 性能优异 , 支持并行查询、索引优化等技术。

  • 开源免费 , 拥有活跃的社区和丰富的文档。

6. 应用场景上的差异

PostgreSQL、Oracle 和 MySQL 在不同的应用场景下可以进行选择:

  1. 对于数据库采购成本不敏感 ,同时又需要高性能、高可用性和强大事务处理能力的大型企业应用 , 如银行、证券等领域 , Oracle 是一个最理想的选择。
  2. 对于数据库采购成本敏感,同时需要高度 SQL 标准兼容性、强大功能和可扩展性的应用,如金融、电信等领域,PostgreSQL 是一个很好的选择。
  3. 对于数据库采购成本敏感,同时需要简单易用、高性能和低成本的 Web 应用,如博客、论坛等,MySQL 是一个不错的选择。

7. 参考链接