看完上面四本书,并领悟了其中的精髓,就可以不用往下看了。
学习自:数据库系统
1 数据库系统
数据库(DB:Database):相互之间有关联关系的数据的集合。
数据库管理系统(DBMS:Database Management System):管理数据库的一种系统软件。如:MySQL,Oracle。
数据库应用(DBAP:Database Application)
数据库管理员(DBA:Database Administrator)
计算机基本系统
上面五个东西构成了数据库系统
2 数据库管理系统
我们平时接触的 MySQL,Oracle 等,实质上是数据库管理系统,而不是数据库。
2.1 SQL(Structured Ouery Language)
SQL 是集 DDL,DML 和 DCL 于一体的数据库语言。用户通过 SQL 指挥 DBMS 去操作数据库。
DDL 语句引导词:Create, Alter, Drop
DML 语句引导词:Insert,Delete,Update,Select
DCL 语句引导词:Grant(授权),Revoke(撤销授权)
2.2 从用户角度看 DBMS
2.2.1 数据库定义语言 DDL
DBMS 提供一套数据定义语言(DDL:Data Definition Language)给用户,用户使用 DDL 描述其所要建立表的格式,然后 DBMS 依照用户的定义创建数据库和 Table。
2.2.2 数据库操纵语言 DML
DBMS 提供一套数据操纵语言(DML:Data Manipulation Language) 给用户,用户使用 DML 描述其所要进行的增删查改操作,然后 DBMS 依照用户的描述去执行。
2.2.3 数据库控制语言 DCL
DBMS 提供一套数据控制语言(DCL:Data Control Language) 给用户,用户使用 DCL 描述其对数据库所要实施的控制,然后 DBMS 依照用户的描述去进行控制。如控制哪些用户对哪些数据有访问权限。
2.3 从系统角度看 DBMS
DBMS 负责解析数据库语言,然后执行。
数据实质上是存储在磁盘上的,而 CPU 只能直接访问内存,所以数据要先读入到内存。
语言编译器:将数据库语言书写的内容,翻译成 DBMS 可执行的命令。
查询优化(执行引擎)与查询实现(基本命令的不同执行算法):提高数据库检索速度。
数据存取与索引:提高数据在磁盘上的高效存取。
事务管理:提高可靠性,避免并发操作错误。
故障恢复:提供备份,日志等适用程序,使数据库自动恢复到故障发生前正确的状态。
安全性控制:提供合法校验,避免用户非法访问数据库。
......
4 MySQL 数据类型与长度
4.1 数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT(M) | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT(M) | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT(M) | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER(M) | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT(M) | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
M 表示最大显示宽度,显示宽度与可存储的值范围无关。将来的 MySQL 版本中将删除对它的支持。
如:
int(11) 显示结果为00000000001
int(3) 显示结果为001字节都是占 4 个字节,所以在设计时直接 int 就行不用设置长度。
4.2 字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR(M) | 0-255字节 | 定长字符串 |
VARCHAR(M) | 0-65535 字节 | 可变长字符串 |
M 表示要存储的最大字符数。
如:
CHAR(30):
最多可容纳30个字符
5 数据库物理存储
5.1 存储层次结构
数据库的数据实质存储在 Disk 中,CPU 通过 I/O 接口把数据从 Disk 读入内存,然后进行运算处理。
5.2 DRAM(Dynamic Random Access Memory,作为主存)
DRAM 是与 CPU 直接交换数据的内部存储器。它可以随时读写,速度快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
5.2.1 DRAM 芯片的内部结构
基本存储单元
DRAM 每隔一段时间,要刷新充电一次,否则内部的数据即会消失。
5.2.2 DRAM 的特点和主要用途
现代 PC 机大多采用 DRAM 作为主存,例如:SDRAM,DDR4,SDRAM
5.3 SRAM(Static Random-Access Memory,在 CPU 里)
SRAM不需要刷新电路即能保存它内部存储的数据
5.3.1 SRAM 的基本存储单元
由 6 个晶体管组成,导致价格贵
5.3.2 SRAM 的特点
5.4 磁盘管理
老式磁盘是由一个个盘片组成。
5.4.1 磁盘整体结构
5.4.2 磁盘盘片结构
每个盘片的盘面被划分成多个狭窄的同心圆环,数据就存储在这样的同心圆环上面,我们将这样的圆环称为磁道 (Track)。最外圈的磁道是0号磁道,向圆心增长依次为1磁道、2磁道…磁盘的数据存放就是从最外圈开始的。
把每个磁道划分为若干个弧段,每个弧段就是一个扇区 (Sector)。扇区是硬盘上存储的物理单位,也是操作系统和块设备(硬件、磁盘)之间传送数据的单位。现在每个扇区可存储 512 字节数据已经成了业界的约定。即使计算机只需要某一个字节的数据,但也得把这个 512 个字节的数据全部读入内存,再选择所需要的那个字节。
硬盘容量 = 盘面数 × 柱面数 × 扇区数 × 512字节
磁盘块/簇(block/cluster)是操作系统虚拟出来的一个概念,是其与磁盘打交道的最小单位。一个磁盘块由一个或多个连续的扇区组成。
5.4.3 操作系统管理磁盘数据
学习自:操作系统原理
操作系统的本质是一个系统软件,是一些程序模块的集合。而操作系统中负责管理和存储文件信息的程序模块称为文件管理系统,简称文件系统。文件系统把数据划分成一个个文件,然后把每个文件拆分成若干磁盘块,保存在若干个扇区里。
文件被划分成 N 块,这 N 块在磁盘上怎么存放?
(1) 顺序结构
FCB 登场!
FCB(File Control Block:文件控制块):用来保存管理文件的有关信息,如文件名,文件大小,文件地址......这些信息最终会存在某个物理块对应的扇区里。每个文件都会对应一个 FCB,采用顺序结构存放文件时,会在 FCB 中记录文件第一块物理块的块号和物理块的数目。
(2) 链接结构
FCB 中记录第一块物理块的块号
FAT 文件分配表
FAT用来记录文件所存放每个扇区的信息
(3) 索引结构
文件系统为每个文件建立一个索引表,用来记录该文件所有物理块的块号。然后,在 FCB 中记录该索引表的地址信息。索引表的存放在某个物理块对应的扇区里。
5.5 内存管理
程序通常以可执行文件格式保存在磁盘上,程序启动时会被抽象成操作系统的一个进程加载到内存。每个进程具有独立的内存地址空间。
怎样为进程分配内存空间呢?
(1) 固定分区
把内存空间分割成若干分区,大小不一,分完就固定不变,每个分区装一个且只能装一个进程。
(2) 可变分区
(3) 页式存储
用户进程地址空间被划分成大小相等的部分,称为 页,从 0 开始编号。
内存空间按同样大小划分成大小相等的区域,称为 页框,从 0 开始编号。
以页为单位进行分配,并按进程需要的页数来分配;逻辑上相邻的页,物理上不一定相邻。
(4) 段式存储
用户进程地址空间:按程序自身的逻辑关系划分为若干个程序段。
内存空间:被动态划分为若干长度不相同的区域,成为物理段,每段在内存中占据连续空间,但各段之间可以不相邻。
5.6 查询实现的基本思想
5.6.1 数据存储的映射关系
5.6.2 基本存储与查询实现的基本框架
5.7 记录与表在磁盘上的存储
5.7.1 总体框架图
5.7.2 数据库记录在磁盘上的存储
(1)定长记录(按长度区分)
每条记录占用的字节数相同,靠分隔符区分开始与结束,再去区分每个属性值。
(2)变长记录(按指针区分)
每条记录占用不同的字节
(3)典型的磁盘块例子
(4)记录非跨块存储
磁盘块剩余的空间不够存放一条记录时,有钱任性,换一块存。但是要有底线,最大可以浪费多大的空间是个严肃的问题。
(5)记录跨块存储(靠指针连接)
一条记录被拆分成多个磁盘块去存储
5.8 数据组织与存储
文件组织(File Organization):将数据组织成记录,块和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及记录与块之间相互联系的方法。
存储方法(Access Method):对文件所采取的存取操作方法
5.8.1 无序记录文件(堆文件Heap)
记录可存储于任意有空间的位置,磁盘上存储的记录是无序的,更新效率高,但检索效率可能低。
法 1:
新记录总是插入到文件尾部,删除记录时,直接删除该记录所在位置的内容,也可以在该记录前标记 “删除标记”
法 2:
新增记录先利用那些标记为 “删除标记” 的记录空间
频繁删增记录会造成空间浪费,需要周期性重新组织数据库
数据库重组(Reorganization):移走被删除的记录,有效记录往前移动。
5.8.2 有序文件组织(排序文件Sequential)