前言:
本篇笔记纪录了学习关系型数据库的相关内容,供个人学习参考所用
如有错误之处,欢迎批评指正。
事务
是由一组SQL语句组成的一个程序执行单元,他需要满足ACID特性。
ACID:
原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行效果。
持久性(Durability):在事务完成后,该事务所有对数据库所做的更改便持久的保存在数据库中,并不会被回滚。
发展历史
- 前DBMS时代——文件系统
-
DBMS时代
DBMS:按照某种数据模型来组织、存储和管理数据的仓库。
通常按数据模型的特点将传统数据库分成网状数据库,层次数据库和关系数据库
层次型,网状型和关系型数据库划分的原则是数据之间的联系方式。
层次型是按记录来存取数据的;网状数据库是采用网状原理和方法来存储数据;关系型数据库是以行和列的形式存储数据
- 网状模型是以记录类型为结点的网络结构,即一个节点可以有一个或多个下级结点,也可以有一个或多个上级结点,两个结点之间甚至可以有多种联系。
- 层次数据库就是树结构,每棵树都有且仅有一个根节点,其余的结点都是非根节点。每个节点表示一个纪录类型对应于实体的概念,记录类型的各个字段对应实体的各个属性。各个记录类型及其字段都必须记录。
- 使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。关系数据模型中,无论是实体,还是实体之间的联系都是被映射成统一的关系——一张二维表,在关系模型中,操作的对象和结果都是一张二维表,由行和列组成。关系型数据库可用于表示实体之间的多对多的关系,只是此时要借助第三个关系表,来实现多对多的关系。
关键技术
SQL语言
1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁,易学易用
高度非过程化
非关系型数据库的操纵语言是面向过程的语言,用其玩成用户请求时,必须指定存取路径,而使用SQL进行数据操作时,用户无需了解存取路径,存取路径的选择
SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义,数据操纵,数据控制的核心功能只用了九个动词:create、alter、drop、select、insert、update、delete、grant、revoke。
且SQL语法简单接近英语口语,因此易学易用。
SQL引擎:
Parser
解析器(Parser)一般分为词法分析、语法分析、语义分析等步骤。
所有的代码在执行前都存在一个解析编译的过程,差异点无非在于是静态解析编译还是动态
SQL语言也类似,在SQL查询执行前的第一步就是查询解析
词法分析:将一条SQL语句对应的字符串分割为一个个token,这些token可以简单分类
语法分析:把词法分析的结果转化为语法树,根据token序列匹配不同的语法规则
语义分析:对语法树中的信息进行合法性校验