深入理解RDBMS | 青训营

61 阅读4分钟

前言:

本篇笔记纪录了学习关系型数据库的相关内容,供个人学习参考所用

如有错误之处,欢迎批评指正。

事务

是由一组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序列匹配不同的语法规则

语义分析:对语法树中的信息进行合法性校验