什么是关系型数据库,关系型数据库有哪些(非常详细)
关系数据库建立在关系数据模型的基础上,是借助集合等数学概念和相关方法来处理数据的数据库。
现实世界中的各种实体以及实体间的各种联系均可用关系数据模型来表示,市场上占很大份额的 Oracle、MySQL 和 DB2 都是采用关系数据模型的数据库管理系统。

图 1 关系数据库示例:学生选课系统
上图所示的学生选课系统中,实体和实体间的联系在关系数据库中的逻辑结构如下图所示:

图 2 学生选课系统在关系数据库中的逻辑结构
关系数据库以行和列的形式存储数据,这一系列的行和列称为表,一组表组成了数据库。下图所示的员工信息表就是关系数据库:

图 3 员工信息表
具体如下:
SQL 可以实现数据库全生命周期的所有操作,因而自产生之日起就成为检验关系数据库管理能力的“试金石”。SQL 包含以下 4 个部分。
例如,创建学生信息表可以使用以下命令:
DQL 的语法结构如下:
例如,向表中插入数据的命令如下:
DCL 以控制用户的访问权限为主,其中的 GRANT 为授权指令,REVOKE 为撤销授权指令。
它的优点主要有以下 3 个:
MySQL 所使用的 SQL 是用于数据库访问的常用标准化语言。MySQL 软件采用了双授权机制,分为社区版和商业版。由于体积小、速度快、使用成本低,尤其是开放源码等特点,中小型网站一般选择 MySQL 来开发自己的数据库。
SQL Server 的主要特性如下:
Oracle 从 Oracle Database 12c(c 表示 cloud,云)之后的版本都是基于云设计的,并引入了一种新的多承租方架构,该架构可以使用户轻松部署和管理数据库云。
OceanBase 底层分布式引擎提供 Paxos 多数派协议和多副本特性,有较好的高可用和容灾能力。OceanBase 产品具有云原生、强一致性、高度兼容 Oracle / MySQL 标准和主流关系数据库、低成本等特点,用户可以很容易从 MySQL 迁移到 OceanBase上。OceanBase 采用了一种读和写分离的架构,把数据分为基线数据和增量数据,比传统数据库更适合“双十一”购物节等短时间突发大流量的场景。
还有一种扩展方式,那便是横向扩展,即采用多台计算机组成集群,共同完成对数据的存储、管理和处理。这种横向扩展的集群对数据进行分散存储和统一管理,可满足海量数据的存储和处理需求。
但是,由于关系数据库具有数据模型、完整性约束、事务的强一致性等特点,因此它难以实现高效率的、易横向扩展的分布式架构。
现实世界中的各种实体以及实体间的各种联系均可用关系数据模型来表示,市场上占很大份额的 Oracle、MySQL 和 DB2 都是采用关系数据模型的数据库管理系统。
关系数据库基本概念
在关系数据库中,实体以及实体间的联系均通过单一的逻辑结构来表示,这种逻辑结构是一张二维表。
图 1 关系数据库示例:学生选课系统
上图所示的学生选课系统中,实体和实体间的联系在关系数据库中的逻辑结构如下图所示:

图 2 学生选课系统在关系数据库中的逻辑结构
关系数据库以行和列的形式存储数据,这一系列的行和列称为表,一组表组成了数据库。下图所示的员工信息表就是关系数据库:

图 3 员工信息表
具体如下:
- 二维表:也叫作关系,是一系列二维数组的集合,用于表示存储数据对象之间的关系。它由纵向的列和横向的行组成;
- 行:也叫作元组或记录,在表中是一条横向的数据集合,表示一个实体;
- 列:也叫作字段或属性,在表中是一条纵向的数据集合。列也定义了表中的数据结构;
- 主属性:也叫作主键,对于关系中的某一属性组,它们的值唯一地标识一条记录。主属性可以是一个属性,也可以由多个属性共同组成。在图1-5中,学号是学生信息表的主属性,但是选课信息表中,学号和课程号共同唯一地标识了一条记录,所以学号和课程号一起组成了选课信息表的主属性。
SQL
关系数据库的核心是其结构查询语言(Structure Query Language,SQL),SQL 涵盖了数据的查询、操纵、定义、控制等操作,是一种综合的、通用且简单易懂的数据库管理语言。同时,SQL 又是一种高度非过程化的语言,可以让数据库管理者只需要指出做什么,而不需要指出该怎么做便完成对数据库的管理。SQL 可以实现数据库全生命周期的所有操作,因而自产生之日起就成为检验关系数据库管理能力的“试金石”。SQL 包含以下 4 个部分。
1) DDL
DDL 包括 CREATE、DROP、ALTER 等动作。在数据库中使用 CREATE 来创建新表,使用 DROP 来删除表,使用 ALTER 来修改数据库对象。例如,创建学生信息表可以使用以下命令:
CREATE TABLE StuInfo(id int(10) NOT NULL,PRIMARY KEY(id),name varchar(20),female bool,class varchar(20));
2) DQL
数据查询语言(Data Query Language,DQL)负责数据查询,但不会对数据本身进行修改。DQL 的语法结构如下:
SELECT FROM 表1,表2 where 查询条件 # 可以使用and、or、not、 = 、between、and、in、like等进行条件组合 group by 分组字段 having(分组后的过滤条件) order by 排序字段和规则;
3) DML
DML 负责对数据库对象来运行数据访问工作的指令集,以 INSERT、UPDATE、DELETE 这 3 种分别表示插入、更新、删除的指令为核心。例如,向表中插入数据的命令如下:
INSERT 表名 (字段1,字段2,…,字段n,) VALUES (字段1值,字段2值,…,字段n值) where 查询条件;
4) DCL
数据控制语言(Data Control Language,DCL)是一种可对数据访问权进行控制的指令。它可以控制特定用户对查看表、预存程序、用户自定义函数等数据库操作的权限,由 GRANT 和 REVOKE 两个指令组成。DCL 以控制用户的访问权限为主,其中的 GRANT 为授权指令,REVOKE 为撤销授权指令。
关系数据库的优点
关系数据库已经发展数十年,是目前世界上应用最广泛的数据库系统,其理论知识、相关技术和产品均趋于完善。它的优点主要有以下 3 个:
- 容易理解:二维表结构非常贴近逻辑世界的概念,关系数据模型相对于层次数据模型和网状数据模型来说更易于理解;
- 便于使用:通用的 SQL 使得用户操作关系数据库非常方便;
- 易于维护:丰富的完整性解决了数据冗余和数据不一致的问题。关系数据库提供对事务的支持,能够保证系统中事务的正确执行;同时还提供事务的恢复、回滚、并发控制等功能,以及死锁问题的解决方法。
主流的数据库管理系统
1) MySQL
MySQL 是一种关系数据库管理系统。关系数据库将数据保存在不同的表中,而不是将所有数据放在一个“大仓库”内,这样大大提高了数据的读/写速度和灵活性。MySQL 所使用的 SQL 是用于数据库访问的常用标准化语言。MySQL 软件采用了双授权机制,分为社区版和商业版。由于体积小、速度快、使用成本低,尤其是开放源码等特点,中小型网站一般选择 MySQL 来开发自己的数据库。
2) SQL Server
SQL Server 是一个可扩展的、高性能的、为分布式客户机/服务器计算而设计的数据库管理系统,实现了与 Windows NT 的有机结合,提供了基于事务的企业级信息管理系统方案。SQL Server 的主要特性如下:
- 高性能设计,可充分利用 Windows NT 的优势;
- 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置;
- 强大的事务处理功能,采用多种方法来保证数据的完整性;
- 支持对称多处理器结构、存储过程、开放式数据库互连,并具有自主的 SQL。
3) Oracle
Oracle 是一种关系数据库管理系统,具有效率高、可靠性好、适应高吞吐量等特点。Oracle 从 Oracle Database 12c(c 表示 cloud,云)之后的版本都是基于云设计的,并引入了一种新的多承租方架构,该架构可以使用户轻松部署和管理数据库云。
4) OceanBase
OceanBase 是由蚂蚁集团完全自主研发的国产原生分布式数据库,始创于 2010 年。OceanBase 底层分布式引擎提供 Paxos 多数派协议和多副本特性,有较好的高可用和容灾能力。OceanBase 产品具有云原生、强一致性、高度兼容 Oracle / MySQL 标准和主流关系数据库、低成本等特点,用户可以很容易从 MySQL 迁移到 OceanBase上。OceanBase 采用了一种读和写分离的架构,把数据分为基线数据和增量数据,比传统数据库更适合“双十一”购物节等短时间突发大流量的场景。
关系数据库的性能瓶颈
随着各类互联网业务的发展,关系数据库难以满足对海量数据的处理需求,存在以下不足。1) 高并发读写能力差
网站类用户的并发性访问量非常大,而一个数据库的最大连接数有限且设备硬盘的读/写能力有限,不能满足很多人同时访问数据库的需求。2) 对海量数据的读/写效率低
若表中数据量太大,则每次的读/写速率将非常低。3) 扩展性差
在关系数据库系统中,可通过升级数据库服务器的硬件配置来提高数据处理能力,即纵向扩展,但纵向扩展终会达到硬件性能的瓶颈,无法应对互联网数据爆炸式增长的挑战。还有一种扩展方式,那便是横向扩展,即采用多台计算机组成集群,共同完成对数据的存储、管理和处理。这种横向扩展的集群对数据进行分散存储和统一管理,可满足海量数据的存储和处理需求。
但是,由于关系数据库具有数据模型、完整性约束、事务的强一致性等特点,因此它难以实现高效率的、易横向扩展的分布式架构。