深入理解 RDMBC
RDMBC 事务的 ACID
事务是有一组sql语句组成的一个程序执行单元(unit),满足ACID的特性
ACID
- 原子性:事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
- 一致性:数据库事务不能破坏数据库的完整性以及业务逻辑的一致性
- 隔离性:多个事务并发访问是,事务之间是隔离的,一个事务不应该影响其他事务的运行效果
- 持久性:在事务完成以后,该事务所对数据库所作的操作便持久保存在数据库中,并不会被回滚
发展历史
前 DBMS 时代
在使用计算机进行存储时,通过人工的方式进行数据的记录与管理,但是效率太低,在 1950 年代计算机的出现人们开始使用文件系统来进行数据的管理
DBMS 时代
过后的10年,文件系统的无法满足人们的多用户分享数据和快速检索的需求,所以产生了数据库系统(DBMS)
DBMS 按照某种数据模型来组织、存储和管理数据的仓库,按照数据模型的特点,将其划分网状数据库 层次数据库 和关系数据库
他们划分的原则是数据之间的联系方式,层次数据库是按照记录来进行数据的存储,网状数据库是采用网状的原理和方法来存储数据;关系型数据库是行列的形式进行存储数据
- 网状模型
- 能直接描述现实世界
- 存储效率高
- 结构复杂
- 用户使用不方便
- 访问程序设计复杂
- 层次模型
- 结构简单
- 查询效率高
- 可以提供完整性支持
- 但是无法表示 M:N 关系
- 插入和删除的限制多
- 遍历需要经过父节点
- 访问程序设计复杂
- 关系模型
- 实体之间的联系通过二维表结构表示
- 可以表示 M: N 关系
- 数据访问路径对用户透明
- 关联查询的效率不高
- 实体间的关系需要进行规范化
SQL 语言
在 1974 年IBM 的Ray Boyce 和 DonChamberlin 将Codd 关系数据库的12 条准则的数学定义以简单的关键字进行描述,提出了 sql 语言
- 语法风格接近自然语言
- 高度非过程化
- 以集合的方式进行操作
- 语言简单,方便学习和使用
在非关系数据模型数据库中的操作语言是以面向过程的语言,需要指定存取路径,但是 sql 只需指明我们的操作的目的是做什么的,实现的过程不要进行了解以及存储的路径的指定,减轻用户的负担,提高数据的独立性
sql 采用集合的方式进行操作,其结果可以是元组的集合包括 插入 删除和更新的操作
关键技术
一条 sql 的一生
Parser
解析器一般包括的解析步骤为
- 词法分析 - 对 sql 语句按照事先的分类进行token的划分
- 语法分析 - 将词法分析的结果生成语法树,然后输出结构化的数据结构
- 语义分析 - 对树中的信息合法性校验
Optimizer
基于规则的优化
- 对条件进行简化
a = 5 and b > a -> a = 5 and b > 5
a > 5 and a < b and b = 1 -> false
-
表连接优化
小表先进行连接
-
Scan优化
- 唯一索引
- 普通索引
- 全表扫描
Note: 数据库索引是数据库管理系统中辅助的数据结构,用于协助快速查询 更新数据库表中的数据(通常使用 B+ 树实现)