数据库是什么
将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库(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版)》