RDBMS与SQL入门 | 青训营笔记

52 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

RDBMS

ACID与事务

ACID是四个英文单词的首字母,分别是

  • 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应当影响其它事务的运行效果
  • 持久性(Durability):在事务完成以后,该事务所对数据库的更改百便持久的保存在数据库之中而不会被回滚

事务(Transaction)是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性

样例

  • 原子性

假设现在你正在抢红包,抢到后,服务器从他人账户中扣除了钱,这时候服务器宕机了,还没来得及给你加上

那么这时候就违背了原子性,因此这个操作不能算是事务

  • 一致性

假设现在你账户里有500元,但是你发了1000元红包,而且发出去了

这时候就违背了一致性,每一个操作都必须是合法的,账户信息应该从一个有效的状态变为另一个有效的状态

  • 持久性

你发出去了一个红包,并且抢到了另一个红包,但是你抢到的钱还没进入你的账户(还未写入磁盘),这时候服务器宕机了

此时违背的是持久性,因为更新结果并没有留存在磁盘中

DBMS数据模型

网状模型

网状数据库所基于的网状数据模型建立的数据之间的联系,能够反映现实世界中信息的关联,是许多空间对象的自然表达形式。

1964年,世界上第一个数据库系统——集成数据存储(Integrated Data Storage,IDS)诞生于通用电气公司。IDS是世界上唯一一个网状数据库,奠定了数据库发展的基础,在当时的到了广泛的应用。在20世纪70年代网状数据库十分流行,在数据库系统产品中占据了主导地位

层次模型

1968年,世界上第一个层次数据库——信息管理系统(Information Management System,IMS)诞生于IBM公司,这也是世界上第一个大型商用数据库操作系统。

层次数据模型,即使用树形结构来描述实体及其之间关系的数据模型

关系模型

1970年,IBM的研究员E.F.Codd博士发表了一篇论文:www.seas.upenn.edu/~zives/03f/…

这篇论文提出了关系模型的概念,奠定了关系模型的理论基础。

1979年由Oracle首次将关系信数据库商业化,后续DB2、SAP Sysbase ASE、和Informix等知名数据库产品也纷纷面世

在关系数据模型中,不论是实体还是实体之间的联系都被映射为统一的关系——一张二维表,在关系模型中,操作的对象和结构都是一张二维表,它是由行和列组成。

关系型数据库可用于表示实体之间的多对多关系,只是此时要借助第三个关系——表,来实现多对多

横向对比

这里列举一个表格来进行各个模型优缺点的总结

网状模型层次模型关系模型
优势能够直接描述世界,且存取效率较高结构简单、查询效率高、可以提供较好的完整性支持实体及实体之间的联系都通过二维表结构来表示,可以方便的表示M:N的关系,数据访问路径对用户透明
劣势结构复杂、用户不易使用、访问程序设计复杂无法表示M:N的关系,插入、删除限制多、遍历子节点必须经过父节点、访问程序设计复杂关联查询效率不高、关系必须规范化

SQL语言

1974年由IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structed Query Language)语言

SQL语言具备如下优势:

  • 语法风格接近自然语言
  • 高度非过程化
  • 面向集合的操作方式
  • 语言简洁,现学现用

SQL的引擎:Parser

所有代码在执行之前,都存在一个解析编译的过程,差异点无非在于是静态解析编译还是动态的

SQL语言也能类似,在SQL查询执行前的第一步就是查询解析

词法分析:将一条SQL语句对应的字符串分割为一个个token,这些token可以简单分类

语法分析:把词法分析的结果转为语法树。根据token序列匹配不同的语法规则。