关系代数
- U 并集 Union 结构相同 取所有部分
- n 交集 取相同部分
- - 差集 减掉相同的部分
- x 笛卡尔积 列:R列数+S列数;行:R行数*S行数
关系代数运算
投影
选择
连接
除
Sql语言
- DDL
Data Definition Language,即数据定义语言.数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,并且由CREATE、ALTER、DROP和TRUNCATE四个语法组成。 - DML
Data Manipulation Language,即数据操纵语言,主要由insert、update、delete语法组成。 - DCL
Data Control Language,即数据控制语言。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。比如常见的授权(GRANT)、取消授权(REVOKE)、回滚、提交等等操作。 - DQL
Data Query Language,即数据查询语言,用来进行数据库中数据的查询。
模式
模式 | 视角 | 抽象 | 具体 | 其他 |
---|---|---|---|---|
外模式 | 用户 | 视图层 | DML\CRUD | 用户操作 |
模式 | 整体 | 逻辑层 | DDL | 逻辑独立性 |
内模式 | 存储 | 物理层 | 存储结构 | 物理独立性 |
外模式(多个)<——>模式<——>内模式
三级模式两级映像
模式固定,实例变化。
Sql执行顺序
from——>where——>group by ——> having——>select——>order by——>limit
数据依赖
函数依赖
- 平凡函数依赖
(学号,姓名)-->姓名 我决定我自己 - 非平凡函数依赖
学号-->(姓名,年纪)我能决定其他 - 完全函数依赖
所有成员决定
(学号,课程)--> 成绩
学号-->学生 - 部分函数依赖
部分成员决定
(学号,班级)-->班长 - 传递依赖
学生-->班级-->班长
多值依赖
1:m 一对多 x-->-->y
m为1时,函数依赖是特殊的多值依赖。
数据库范式
1NF
属性不可再分
2NF
非主属性完全依赖于主键,存在传递函数依赖
3NF
非主属性直接依赖于主键,消除传递函数依赖
BCNF
消除3NF的主属性依赖,1个候选键肯定是BCNF
4NF
消除3NF的多值依赖
模式分解
- 无损连接
- 是否函数依赖
- 既无损连接,又保持函数依赖
数据库故障与恢复
建立数据冗余:数据转存与建立日志文件
事务故障
引发原因:程序错误、逻辑错误、系统错误
修复方式:Undo
系统故障
引发原因:硬件、软件(操作系统)故障
修复方式:Redo
介质故障
引发原因:磁盘损坏,
修复方式:重装数据库,装载备份和日志文件,DBA介入,再由系统撤销及重做。
锁
- X锁(排他锁)独占,其他事务既不能读也不能其他操作
使用排它锁前需要先检查是否已有排它锁存在。 - S锁(共享锁)其他事务只读
事务
特点:原子性、一致性、隔离性、持久性
原子性:要么全部成功,要么全部失败,不存在只成功一部分。
一致性:从一个一致性的状态转到另一个一致性的状态。
隔离性:其他事务不知道当前事务,其他事务对当前事务不可见。
持久性:事务提交,其所作更改保存到数据库。
事务并发
数据不一致
问题:
- 修改丢失
发生在Update
A、B事务同时更新,B覆盖了A的更新。 - 脏读
发生在Update
B事务读取到了A事务还未提交的修改。A进行Rollback,B事务两次读取数据不一样。(读取缓存中未提交的数据) - 不可重复读
发生在Update/Delete
一个事务中两次读取数据结果不一样。B事务读取两次数据,读取过程中A事务改变数据,B事务两次读取数来的数据不一样。(读取已提交的数据) - 幻读
发生在Insert
隔离级别
- 读未提交,可能存在脏读,读取到了未提交的数据
- 读已提交,解决了脏读
- 可重复读,解决了不可重复读
- 序列化读,解决了事务并发的3个问题
数据库封锁协议
在保证事务一致性的前提下,尽可能提高并发。
封锁协议:对数据加锁,加锁时间和释放时间的规则描述。
一级封锁协议
事务修改数据,加x锁,直到事务结束,才释放x锁。
针对改,解决了丢失修改问题
二级封锁协议
一级封锁协议+
事务读取数据,加s锁,读完立即释放s锁。
针对改+读,解决了读脏数据,未解决不可重复读
三级封锁协议
二级封锁协议+
事务读取数据加S锁,直到事务结束,才释放S锁。
针对改+读,解决了不可重复读
两段锁协议
- 对任何数据的读写前,都必须先加锁。 应加尽加,不解锁。
- 释放某个锁以后,不得再去尝试获取其他锁。 集中解锁,不允许再加。
两段锁协议是可串行化的充分非必要条件,采用两段锁协议,仍然可能产生死锁。
并发调度
串行调度:不允许事务并发,所有事务排队
可串行化调度:事务并发调度的执行结果与某个串行调度的执行结果等价(串行等价)
可串行化未必遵循两段锁协议。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下