数据库和SQL

数据库是什么

将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(Database,DB)。将姓名、住址、电话号码、邮箱地址、爱好和家庭构成等数据保存到数据库中,就可以随时迅速获取想要的信息了。用来管理数据库的计算机系统称为数据库管理系统(Database Management System,DBMS)。

数据库管理系统(DBMS)

那么,为什么要使用专用系统(DBMS)来管理数据呢?我们通过计算机管理数据的时候,通常使用文本文件B 或者Excel 那样的电子制表软件就可以完成了,非常简单。

确实,通过文本文件或者电子制表软件来管理数据的方法非常简便,但也有不足。下面就举几个有代表性的例子。

  • 无法多人共享数据

    保存在已连接网络的计算机中的文件,可以通过共享设定实现多个用户在线阅读或编辑。但是,当某个用户打开该文件的时候,其他用户就无法进行编辑了。如果是网上商城的话,当某个用户购买商品的时候,其他用户就无法购买了。

  • 无法提供操作大量数据所需的格式

    要想瞬间从几十万或者上百万的数据中获取想要的数据,必须把数据保存为适当的格式,但是文本文件和Excel 工作表等无法提供相应的格式。

  • 实现读写自动化需要编程能力

    通过编写计算机程序(以下简称程序)可以实现数据读取和编辑自动化,但这必须以了解数据结构为前提,还需具备一定的计算机编程技术。

  • 无法应对突发事故

    当文件被误删、硬盘出现故障等导致无法读取的时候,可能会造成重要数据丢失,同时数据还可能被他人轻易读取或窃用。

DBMS 可以克服这些不足,实现多个用户同时安全简单地操作大量数据。这也是我们一定要使用DBMS 的原因。

DBMS的种类

DBMS 主要通过数据的保存格式(数据库的种类)来进行分类。

  • 层次数据库(Hierarchical Database,HDB)

    最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和普
    及,现在已经很少使用了。

  • 关系数据库(Relational Database,RDB)

    关系数据库是现在应用最广泛的数据库。关系数据库在1969 年诞生,可谓历史悠久。和Excel 工作表一样,它也采用由行和列组成的二维表来
    管理数据,所以简单易懂。同时,它还使用专门的SQL(Structured Query Language,结构化查询语言)对数据进行操作。

  • 面向对象数据库(Object Oriented Database,OODB)

    编程语言当中有一种被称为面向对象语言的语言A。把数据以及对数据的操作集合起来以对象为单位进行管理,因此得名。面向对象数据库就
    是用来保存这些对象的数据库。

  • XML数据库(XML Database,XMLDB)

    最近几年,XMLB 作为在网络上进行交互的数据的形式逐渐普及起来。XML 数据库可以对XML 形式的大量数据进行高速处理。

  • 键值存储系统(Key-Value Store,KVS)

    这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组或者散列
    (hash)。近年来,随着键值存储系统被应用到Google 等需要对大量数据进行超高速查询的Web 服务当中,它正逐渐为人们所关注。

  • 文档数据库

    文档存储,也称为面向文档的数据库系统,其特点是数据的无模式组织。

    这意味着:

    • 记录不需要有统一的结构,即不同的记录可以有不同的列。
    • 对于每条记录,各个列的值的类型可以不同。
    • 列可以有多个值(数组)。
    • 记录可以具有嵌套结构。

    文档存储通常使用内部符号,可以直接在应用程序中处理,主要是 JSON。JSON 文档当然也可以作为纯文本存储在键值存储或关系数据库系统中。

  • 搜索引擎

    搜索引擎是专用于搜索数据内容的NoSQL数据库管理系统。除了针对此类应用程序的一般优化外,专业化通常包括提供以下功能:

    • 支持复杂的搜索表达式
    • 全文检索
    • 词干化(减少词干的屈折词)
    • 搜索结果的排名和分组
    • 分布式搜索以实现高可扩展性
  • 时序数据库

    时间序列 DBMS 是一种数据库管理系统,针对处理时间序列数据进行了优化:每个条目都与时间戳相关联。

    例如,时间序列数据可能由物联网中的传感器、智能仪表或 RFID 产生,或者可能描绘高频股票交易系统的股票行情。

    时间序列 DBMS 旨在高效地收集、存储和查询具有高交易量的各种时间序列。

  • 图形数据库

    图 DBMS,也称为面向图的 DBMS 或图数据库,将图结构中的数据表示为节点和边,即节点之间的关系。它们允许以这种形式轻松处理数据,并可以简单计算图形的特定属性,例如从一个节点到另一个节点所需的步骤数。

  • 宽列存储

    宽列存储,也称为可扩展记录存储,将数据存储在能够容纳大量动态列的记录中。由于列名和记录键都不是固定的,而且一个记录可以有数十亿列,所以宽列存储可以看作是二维的键值存储。

标准SQL

国际标准化组织(ISO)为SQL制定了相应的标准,以此为基准的SQL 称为标准SQL。以前,完全基于标准SQL的RDBMS 很少,通常需要根据不同的RDBMS来编写特定的SQL 语句。这样一来,就会造成能够在Oracle 中使用的SQL 语句却无法在SQL Server 中使用,反之亦然。近来,对标准SQL的支持取得了一些进展,因此希望准备学习SQL 的读者们能够从现在开始就牢记标准SQL的书写方式。

SQL 语句及其种类

根据对RDBMS 赋予的指令种类的不同,SQL 语句可以分为以下三类。

  • DDL

    DDL(Data Definition Language,数据定义语言)用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。

    CREATE: 创建数据库和表等对象

    DROP: 删除数据库和表等对象

    ALTER: 修改数据库和表等对象的结构

  • DML

    DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录。DML 包含以下几种指令。

    SELECT:查询表中的数据

    INSERT:向表中插入新数据

    UPDATE:更新表中的数据

    DELETE:删除表中的数据

  • DCL

    DCL(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令。

    COMMIT: 确认对数据库中的数据进行的变更

    ROLLBACK: 取消对数据库中的数据进行的变更

    GRANT: 赋予用户操作权限

    REVOKE: 取消用户的操作权限

标准SQL和特定的SQL

每隔几年,ANSI(美国国家标准协会)或ISO(国际标准化组织)等便会修订SQL 的标准,进行语法的修订并追加新功能。修订后的标准以修订年份来命名,例如SQL:1999、SQL:2003、SQL:2008 等。以这些标准为基准的SQL 就是标准SQL。

但是,SQL 的标准并不强制“每种RDBMS 都必须使用”。虽然支持标准SQL的RDBMS 越来越多,但还是存在标准SQL无法执行的情况。这时就需要使用只能在特定RDBMS 中使用的特殊SQL 语句。

其实,这也是没有办法的事情,起初(大约在20 世纪80 年代到90 年代),标准SQL 能够实现的功能非常有限,无法完全满足实际需要。RDBMS 的供应商为了弥补这些不足,不得不再单独追加所需要的功能。

尽管如此,这些特定的SQL 所带来的并不都是负面的影响。标准SQL 将一些独特的功能收录其中,对其自身的发展起到了积极的推进作用。过去,各个供应商为了展现本公司的优势和独特性,也曾不遗余力地开发各自特定的SQL。

参考资料

《SQL基础教程(第2版)》

https://db-engines.com/en/articles

上一篇:RDBMS与NoSQL的区别


下一篇:【数据分析笔记】task01:数据加载及探索性数据分析