这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
1.RDBMS事务ACID
事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性。
ACID
- 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏数据的完整性以及业务逻辑上的一致性。
- 隔离性(Isolation):多个事务并发访问时,事物之间是隔离的,一个事务不应该影响其他事务运行效果。
- 持久性(Duration):在事务完成以后,该事务对数据库所做的更改便持久地保存在数据库之中,并不会被回滚。
2.DBMS数据模型
| 网状模型 | 层次模型 | 关系模型 | |
|---|---|---|---|
| 优势 | 能直接描述现实世界 存取效率较高 | 结构简单 查询效率高 可以提供好的完整性支持 | 实体及实体间的联系都通过二维表结构表示 可以方便的表示M:N关系 数据访问路径对用户透明 |
| 劣势 | 结构复杂 用户不易使用 访问程序设计复杂 | 无法表示M:N的关系 插入删除限制多 遍历子节点必须经过父节点 访问程序设计复杂 | 关联查询效率不够高 关系必须规范化 |
SQL语言
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简介,易学易用
3.关键技术
SQL引擎
查询解析: SQL语言接近自然语言,入门容易。但是各种关键字、操作符组合起来,可以表达丰富的语意。因此想要处理SQL命令,首先将文本解析成结构化数据,也就是抽象语法树(AST)。
查询优化:SQL是一门表意的语言,只是说“要做什么”,而不说“怎么做”。所以需要一些复杂的逻辑选择“如何拿数据”,也就是选择一个好的查询计认划。优化器的作用根据AST优化产生最优执行计划(Plan Tree) 。
查询执行:根据查询计划,完成数据读取、处理、写入等操作。
事务引擎:处理事务一致性、并发、读写隔离等
存储引擎:内存中的数据缓存区、数据文件、日志文件
所有的代码在执行之前,都存在一个解析编译的过程,差异点无非在于是静态解析编译还是动态的。
SQL语言也类似,在SQL查询执行前的第一步就是查询解析。
词法分析:将一条SQL语句对应的字符串分割为一个个token,这些token可以简单分类。
语法分析:把词法分析的结果转为语法树。根据tocken序列匹配不同的语法规则,比如这里匹配的是update语法规则 类似的还有insert、delete、select、create、drop等等语法规则。根据语法规则匹配SQL语句中的关键字,最终输出一个结构化的数据结构。
语义分析:对语法树中的信息进行合法性校验。