一、诸论 1.数据库系统概论
- 数据——描述事务的符号记录
- 数据库——数据库是长期存储在计算机内、有组织、可共享的大量数据的集合
- 数据库管理系统——位于用户与操作系统之间的一层数据管理软件
- 数据库系统——由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统
- 数据结构
- 数据操作
- 数据的完整性约束条件
- 层次模型
- 网状模型
- 关系模型
文章图片
- 模式——也称逻辑模式,是数据库全体数据的逻辑结构和特征的描述,是所有用户的额公共视图
- 外模式——它是数据库用户能够看见和使用的局部诗句的逻辑结构和特征的描述,是数据库用户的视图
- 内模式——也称为存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
D1xD2xD3xD4
的子集叫做在域D1、D2、D3D4上的关系候选码——某一属性组的值能唯一的标识一个元组,而其子集不能,则称该属性组为候选码
主码——若一个关系有多个候选码,选定一个为主码
候选码的属性称为主属性,不包含在任何候选码的属性称为非主属性
2.
关系的描述
称为关系模式,表示为:R(U,D,DOM,F)
R——关系名,U——组成该关系的属性集合,D——U中属性所来自的域
DOM——属性向域的映像集合,F——属性间数据的依赖关系集合
2.关系完整性
- 实体完整性:主属性不能取空值
- 参照完整性:外码要么为空值、要么为某个元组的主码值
- 用户定义的完整性
- 并
- 差
- 交
- 笛卡尔积
- 选择:在关系 R 中选择满足给定条件的元组(>、<、=……)
行
- 投影:关系 R 的投影是从 R 中选出若干属性列
列
(会去除重复行) - 连接:从两个关系的笛卡尔积中选取满足给定条件的元组
- 除运算:设 R 除 S 的结果为T,则
T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有的所有组合都在R中
1.创建表
CREATE TABLE mytable(
id INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL,
col2 VARCHAR(40) NULL,
PRIMARY KEY(id)
);
2.修改表
#添加列
ALTER TABLE mytable
ADD col INT NOT NULL;
#删除列
ALTER TABLE mytable
DROP column col;
#删除表
DROP TABLE mytable;
1.2索引
CREATE INDEX index_name ON table_name(column1,column2)
2.数据查询
SELECT [ALL|DISTINCT]
FROM
[WHERE<条件表达式>]#条件查询
[GROUP BY]#分组查询
[ORDER BY[ASC|DESC]] #排序DISTINCT 去重复 1.使用 LIKE 进行通配符匹配(只能用于文本字段)
WHERE col LIKE 'ab%' #以 ab 开头的字段2.计算字段使用 AS 取别名,否则输出的时候字段名为计算表达式
SELECT col1*col2 AS alias
FROM mytable3. 把具有相同数值的行放在同一组中4.ASC 升序(默认)
DESC 降序
3.数据更新 更新
UPDATE table_name
SET col1=val
WHERE<条件表达式>
插入
INSERT INTO table_name(col1,col2)
VALUES(col1,col2)
删除
DELETE FROM table_name
WHERE<条件表达式>
4.视图
CREATE VIEW view_name
AS
<子查询>
作用:
- 简化用户操作
- 对机密数据提供安全保护
- 静态口令鉴别
- 动态口令鉴别:比如短信验证、动态令牌
- 生物特征鉴别
- 智能卡鉴别
定义用户权限
与合法权限检查
自主存取控制:用户对不同的数据库有不同的访问权限,不同的用户对同一数据库也有不同的权限,且用户还可以将拥有的权限转授给其它用户
强制存取控制:每一个数据库都被标以一定的密级,每一个用户也被授予某一个级别的许可证。
自主存取控制方法:
1.GRANT 授权GRANT <权限>
ON <对象>
TO <用户>
[WITH GRANT OPTION] #转授权例如:把查询 student 表的权限授予给 U4 用户
GRANT SELECT
ON TABLE student
TO U4
2.REVOKE 收回REVOKE <权限>
ON <对象>
FROM <用户>例如:把用户 U4 修改学生号的权限收回
REVOKE UPDATE(Sno)
ON TABLE student
FROM U4
强制存取控制方法
主体:系统中活动的实体,指数据库管理系统所管理的实际用户
客体:系统中被动实体,指文件、基本表、索引等
规则:
- 主体
大于
或等于客体密级,才能读
- 主体
小于
或等于客体密级,才能写
3.审计 把用户对数据库的所有操作自动记录下来放入到审计日志,审计员通过审计日志监控数据库的行为,找出非法存取数据的人
数据库的安全审计系统提供了一种时候检查的安全机制!
4.视图机制 通过视图把要保密的数据对无权限的用户隐藏起来
5.数据加密 将数据的原始数据——原文加密为不可直接识别的格式——密文,使得不知道解密算法的人无法获知数据内容
五、数据库完整性 1.实体完整性 通过
PRIMARY KEY
定义2.参照完整性 用
FOREIGN KEY
定义哪些列为主码,用 REFERENCES
指明这些外码参照哪些表的主码例如:
FOREIGN KEY(Sno) REFERENCES Student(Sno);
3.用户定义的完整性 1.不能取空值
NOT NULL
2.列值唯一
UNIQUE
3.用
CHECK
指定列值应满足的条件Sex VARCHAR(2) CHECK (Sex IN ('男','女'));
#性别只能选 '男','女'
4 .通过
constaraint <完整约束名> <完整约束条件>
定义完整约束命名子句4.定义触发器 六、关系数据理论 1.规范化 1.函数依赖:对一个关系 r,
不存在
两个元组在X 上的属性值相等,而在 Y上的属性值不相等
,称 X 确定 Y 或者 Y 依赖于 X2.完全函数依赖:在 R(U)中,
X-->Y,并且不存在X的任何一个真子集 X' 有 X'-->Y
3 .传递函数依赖:
X-->Y, Y-->Z
,则称 Z 对 X 传递函数依赖第一范式
符合
1NF
的关系中每个属性都不可再分
文章图片
缺点:数据冗余
插入异常(只添加系而不添加学生插入异常)
修改异常(修改其中系,其余记录也要修改相应系)
删除异常(删除某个系得所有学生记录,则这个系的信息也被抹除,但是一个系学生没了并不代表这个系不存在,系主任不存在)
第二范式
2NF 在 1NF 的基础上,消除了
非主属性对码的部分函数依赖
文章图片
基本消除数据冗余与修改异常
第三范式
3NF 在 2NF 的基础上消除了
非主属性对码的传递函数依赖
文章图片
删除与插入异常基本消除
https://blog.csdn.net/wenco1/article/details/88077279
七、数据库设计 1.需求分析 2.概念结构设计 画出 E-R 图
3.逻辑结构设计 将 E-R 转换为数据库系统所支持的数据模型相符合的逻辑结构
如将 E-R 图转换为 关系模型
`职工(职工号 、部门号、职工名、职务)
4.物理结构设计 为给定的逻辑数据模型选取一个最合适的物理结构
主要包括
为关系模式选择存取方法
、存储结构
存取方法:
1.B+ 树索引
2.Hash 索引
3.聚簇存取方法
存储结构:
1.数据存放位置
2.系统配置
5.数据库实施 6.数据库运行和维护 九、关系查询处理和查询优化 查询处理步骤
- 查询分析
对查询语句进行扫描、词法分析和语法分析 - 查询检查
对查询语义进行分析 - 查询优化
- 查询执行
按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式的次序和组合,使得查询更高效
a.通过对
关系代数表达式的等价变换
来提高查询效率b.查询树的启发式优化
1.选择运算尽可能先做
选择运算一般使计算的中间结果大大变小2.把投影运算和选择运算同时进行
它们都对同一个关系操作,同时进行避免了重复扫描3.把投影运算同其前或后的双目运算结合起来4.把某些选择运算同在它前面要执行的笛卡尔积结合起来成为一个连接运算
连接比同关系上的笛卡尔积省很多时间5.找出公共子表达式
2 . 物理优化
指存取路径和底层操作算法的选择
1.基于代价
2.基于规则
3.基于语义
十、数据库恢复技术 1.事务基本概念 满足 ACID 的一组操作,要么全部做,要么全部不做,是一个不可分割的单位
ACID:
- 原子性
一个事务被视为一个不可分割的单位,不可能只执行其中的一部分 - 一致性
数据库总是从一个一致性状态转移到另一个一致性状态 - 隔离性
一个事务内部操作及使用的数据对其它事务是隔离的,并发执行的各个事务之间不能相互干扰 - 持续性
一旦事务提交,所做的修改将永远保存在数据库中
2.系统故障
3.介质故障
4.计算机病毒
3.恢复的实现技术 数据转存
定期的将数据库的数据复制到磁带、磁盘或者其它存储介质上存储起来的过程
有:动态转存、静态转存——转存期间能否有事务运行
登记日志文件
1.日志文件格式与内容
日志文件——
用来记录事务对数据库更新操作的文件
格式:以记录为单位、以数据块为单位
内容:记录型——事务标识、操作类型、操作对象、新值、旧值
数据块型——事务标识、数据块
2.为保证数据库是可恢复的,登记日志文件需保证以下两个原则:
- 登记的次序严格按照并发事务执行的时间次序
- 必须先写日志文件再写数据库
事务故障指事务在运行至正常终点前被终止
这时恢复子系统通过日志文件撤销已经对数据库进行的修改;
反向扫描日志,查找该事务的更新操作,并对该事务的更新操作执行逆操作
2.系统故障的恢复
撤销故障发生时未完成的任务,重做已完成的任务
1.正向扫描日志,故障前完成加入 REDO 队列,故障后完成加入 UNDO 队列;2.对于 UNDO 队列按事务更新操作逆向恢复;3.对 REDO 重做事务
3.介质故障的恢复
重装数据库,重做已完成的事务
【学习笔记——数据库系统概论知识点总结】1.重载数据库副本;2.重载日志文件
5.具有检查点的恢复 利用日志技术恢复缺点:1.搜索整个日志耗时长;2.有些 REDO 操作可能不需要进行,因为已经写入数据库
在日志文件中新增一类——检查点记录,并增加一个重新开始文件,有恢复子系统在登录日志文件期间动态的维护日志
检查点记录包括:1.建立时刻正在执行的任务清单;2.最近一个日志记录地址
恢复步骤:
- 通过重新开始文件在日志中找到最后一个检查点记录
- 从检查点开始正向扫描日志,有新开始的事务加入 UNDO,提交事务加入 REDO
- REDO 重做,UNDO 回滚;
并发一致性问题:
- 丢失修改——A、B 同时修改数据,B 的提交破坏了 A 的提交,导致 A 的修改丢失
- 脏读——事务 B 读取了事务 A 回滚的数据
- 不可重复读——事务 B 在事务 A 执行期间修改了数据,导致A 前后读取数据不一致
- 幻读——事务 B 在事务 A 执行期间新插入数据。导致 A 再次读取某范围内数据时多了一行
破坏了事务隔离性
。并发控制机制主要就是用正确的方式调度并发操作,是一个用户事务的执行不受其它事务的干扰
主要技术有:封锁、时间戳、乐观控制法和多版本控制
1.封锁 指事务在对某个数据对象操作之前,先向系统发出请求对其加锁
基本封锁类型:
- 排他锁(写锁)
一个写锁会阻塞其它写锁与读锁 - 共享锁(读锁)
只会阻塞写锁
1.一级封锁协议:事务在修改数据之前必须先对其加写锁,事务结束才释放
防止丢失修改
2.二级封锁协议:在一级封锁协议的基础上增加事务在读取数据前先加读锁,读完释放
防止丢失修改、脏读
3.三级封锁协议:在一级封锁协议的基础上增加事务在读取数据前先加读锁,事务结束释放
防止丢失修改、脏读、不可重复读
3.活锁和死锁 1.活锁:申请锁的事务一直等待
避免活锁的简单方法就是采用
先来先服务
的策略2.死锁:两个进程由于争夺资源而造成的一种相互等待的现象,如无外力,它们都将无法推进下去
解决:回滚、抢占、杀死进程
数据库解决条件:1.一次封锁法;2.顺序封锁法
4.并发调度的可串行性 5.封锁的粒度 1.封锁对象的大小称为封锁的粒度;
2.封锁的粒度与系统的并发度和并发控制的开销密切相关;封锁粒度越小,并发度越大,并发控制开销越大;
3.多粒度封锁树——数据库–>关系–>元组
显示封锁是应事务要求直接在数据对象上加锁;隐式封锁指该数据对象没有被独立加锁,但是由于其上级结点加锁从而导致该数据被加锁
4 . 在对某个对象加锁时要
a.检查它是否有显示封锁与之冲突; 非常麻烦。
b.检查其上级结点,看本事务的显示封锁是否与该数据对象的隐式封锁冲突
c.检查其下级结点,看看它们的显示封锁是否与本事务的隐式封锁冲突
为此引入了一种新型锁——意向锁
5.意向锁——如果对一个对象加意向锁,则说明该结点的下层结点正在被加锁;
对任一结点加锁时,必须先对它的上层结点加意向锁
有了意向锁,就无需检查下一级结点的显示封锁
6.意向锁分类:
a.意向共享锁——它后面结点加S锁
b.意向排他锁——它后面结点加X锁
c.共享意向排他锁——S锁+意向排他锁
推荐阅读
- 学习笔记|人工智能导论学习笔记(考前复习)
- 《多元统计分析》学习笔记之聚类分析
- 《统计学(从数据到结论》学习笔记(part2)--总体是人们所关心的所有个体的集合)
- MongoDB学习笔记MongoDB索引那点事
- KVM虚拟化系统学习笔记
- #私藏项目实操分享# Angular Change Detection 的学习笔记
- vue.js|vue.js 生命周期函数(五)
- #yyds干货盘点#springcloud学习笔记---Robbin---2
- #yyds干货盘点#MyBatis-plus学习笔记