文章目录
前言
本笔记主要来源于王珊老师的课程:https://www.bilibili.com/video/BV13J411J7Vu/?p=1&vd_source=887851cb00540298d60639080f3a1241,
及一位学霸同学的笔记。
我个人的笔记就尽量精简,只记录最为重要的部分。详细可跳转查询学霸的笔记。知识,最好记在脑子里而不是外在的纸质或电子笔记上。
SQL实操
参考链接:https://blog.youkuaiyun.com/weixin_60719453/article/details/122095607
SQL刷题
牛客:https://www.nowcoder.com/exam/oj/ta?tpId=298
力扣:
基础篇:1-5章
第 1 章 绪论
1.1 数据库系统概述:4个概念
1.四个概念:数据、数据库、数据库管理系统、数据库系统
(1)数据
数据共享度高,冗余度低,数据独立性高。
(2)数据库
①数据库特点:长期存储、有组织、可共享。
②数据库定义:数据库是长期存储在计算机内有组织的可共享的大量数据的集合
(3)数据库管理系统 DBMS
(4)数据库系统 DBS,包括:
①DB【数据库,Database】
②DBMS【数据库管理系统,DBMS】
③DBA【数据库管理员,Database Administrator,简称DBA】
2.三大系统:操作系统、数据库系统、编译系统
1.2 数据模型
1.概念模型
概念模型,也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。
①实体 (entity)
②属性 (attribute)
③码 / 键 (key):唯一标识实体的属性集,例如学号是学生实体的码
④实体型 (entity type):实体加属性,例如: 学生(学号,姓名,性别)
⑤实体集 (entity set):同一类实体的集合
⑥联系 (relationship):实体内部的联系是指实体的各属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。实体之间的联系有一对一、一对多和多对多等多种类型
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
若一个关系有多个候选码,则选定其中一个为主码(主键)。
候选码的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。
若关系模式的所有属性均是这个关系模式的候选码,则称为全码
2.逻辑模型和物理模型
①逻辑模型:包括 层次模型、网状模型、关系模型。
它是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现
②物理模型:是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
常用逻辑类型:
①层次模型(树)

②网状模型(图)
③关系模型(表)
①关系:整张表
②元组:一行
③属性:一列
1.3 数据库系统的结构
1.三级模式结构:外模式 - 模式 - 内模式
①外模式 :数据局部逻辑结构(多个)
②模式:数据全局逻辑机构(一个)
③内模式数据物理结构和存储方式(一个)

2.二级映像:外模式/模式映像 - 模式/内模式映像
①外模式/模式映像:一个模式可对应多个外模式。对于每个外模式,数据库系统都有一个 外模式/模式映像,它定义了该外模式与模式之间的对应关系。
②模式/内模式映像:数据库只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的。
1.4 数据库系统的组成
1.5 小结
第 2 章 关系数据库
关系数据库,就是关系构成的集合。
2.1 关系数据结构
1.笛卡尔积
A={a,b},B={0,1,2},则笛卡尔积A×B={a,0} {a,1} {a,2} {b,0} {b,1} {b,2}
2.元组
3.码
关系模式:R(U,D,DOM,F)
2.2 关系操作
1.基本的关系操作
关系操作:查询(query)、插入(insert)、删除(delete)、修改(update)
其中查询操作又可分为:选择、投影、连接、除、并、差、交、笛卡尔积
其中5种基本操作是:选择、投影、并、差、笛卡尔积
自然连接
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。
例题1:
答案:B
例题2:
关系数据库的查询
2.关系数据语言的分类
①关系代数语言 (过程化语言)
②关系演算语言
③SQL
2.3 关系的完整性
实体完整性、参照完整性、用户定义完整性
关系的两个不变性:实体完整性、参照完整性
①实体完整性:主属性不能取空值。【主码唯一且非空】
②参照完整性:外码只能有0~1个。
③用户定义完整性:
例题:
2.4 关系代数
5种基本代数运算
并,差,笛卡尔积,选择,投影
∪ - × σ π
例题1:
8种关系代数运算符
运算符 | 含义 |
---|---|
∪ | 并 |
- | 差 |
∩ | 交 |
× | 笛卡尔积 |
σ | 选择 |
Π | 投影 |
⋈ | 连接 |
÷ | 除 |
悬浮元组:不存在公共属性上值相等,而被舍弃的元组
外连接:保留两个组的悬浮元组,空值填NULL
左外连接:保留左边悬浮元组
右外连接:保留右边悬浮元组
除÷

2.5 关系演算
1.元组关系演算 语言 ALPHA (Tuple Relationship Calculus)
2.域关系演算 语言 QBE (Domain Relationship Calculus)
第 3 章 SQL语言
关系数据库标准语言:结构化查询语言SQL (Structured Query Language),是一种高度非过程化的语言。(关系代数语言,是一种过程化语言)
SQL的功能:数据查询、数据定义、数据操纵、数据控制
1.数据定义
2.数据查询
1.单表查询
SELECT [ALL|DISTINCT] 目标列表达式
FROM 表名
WHERE 条件
GROUP BY 列名 HAVING 条件表达式
ORDER BY 列名 [ASC|DESC]
SELECT
并操作:UNION
交操作:INTERSECT
差操作:EXCEPT
去重:DISTINCT
WHRER
2.确定范围:BETWEEN
(含下限) AND
(含上限) 、NOT BETWEEN (含下限) AND (含上限)
4.字符匹配:LIKE
(1)通配符
%
:任意长度
_
:一个字符
(2).转义字符:ESCAPE
举例:查询DB_Design课程的课程号和学分
SELECT Cno,Credit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE'\';
ORDER BY 排序
ORDER BY子句对一个或多个属性列进行 升序(ASC) 或 降序(DESC) 排列,不写方式默认为升序。
例题1:查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排序
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC; //按成绩降序
聚集函数
DISTINCT:取消重复值
例题:
GROUP BY 分组、Having 筛选
WHERE子句和HAVING子句的区别是作用的对象不同。
①WHERE作用于基本表或视图,筛选元组
②HAVING作用于组,筛选满足条件的组
例题间课本P98-99
2.连接查询
3.嵌套查询
3.数据更新
(1)插入数据 INSERT
INSERT
INTO <表名>(属性)
VALUES (属性值);
(2)修改/更新 UPDATE
UPDATE <表名>
SET 列名=表达式
WHERE 条件;
(3)删除数据 DELETE
DELETE
FROM <表名>
WHERE 条件;
第 4 章 数据库安全性
4.1 数据库安全性概述
1.数据库的不安全因素
①非授权用户对数据库的恶意存取和破坏【DBMS提供的安全措施:用户身份鉴别、存取控制、视图】
②数据库中重要或敏感的数据被泄露【DBMS提供的安全措施:强制存取控制、数据加密存储、加密传输、审计功能】
③安全环境的脆弱性
2.安全标准简介
①TCSEC标准
②CC标准
4.2 数据库安全性控制

1.用户身份鉴别
①静态口令鉴别
②动态口令鉴别
③生物特征鉴别
④智能卡鉴别
2.存取控制
(1)自主存取控制 DAC
(2)强制存取控制 MAC
授权GRANT、收回权限 REVOKE
1.GRANT
GRANT 权限
ON 对象类型 对象名
TO 用户名
2.REVOKE
REVOKE 权限
ON 对象类型 对象名
FROM 用户 [CASCADE|RESTRICT]
CASCADE:级联回收
RESTRICT:受限回收
数据库角色 ROLE
角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,以便简化授权的过程。
1.角色的创建
CREATE ROLE 角色名
2.给角色授权
GRANT 权限
ON 对象类型 对象名
TO 角色
3.将一个角色授予其他的角色或用户
GRANT 角色
TO
[WITH ADMIN OPTION]
4.角色权限的收回
REVOKE 权限
ON 对象类型 对象名
FROM 角色
5.角色权限的增加
GRANT 要增加的权限名
ON 对象类型 对象名
TO 角色名
6.角色权限的减少
REVOKE 要减少的权限名
ON 对象类型 对象名
FROM 角色名
存取控制
自主存取控制 DAC
强制存取控制 MAC
4.3 视图机制
4.4 审计


AUDIT 审计
AUDIT 权限
ON 对象名
NOAUDIT 取消审计
NOAUDIT 权限
ON 对象名
4.5 数据加密
明文(plain text)经加密算法变成密文(cipher text)
1.存储加密
①透明加密
②非透明加密
2.传输加密
①链路加密
②端到端加密
第 5 章 数据库完整性
1.数据的完整性是指数据的正确性和相容性
断言
触发器
高级篇:6-8章
第 6 章 关系数据理论(规范化理论)
数据依赖:①函数依赖 ②多值依赖 ③连接依赖
函数依赖
1.函数依赖的定义:X函数确定Y 或 Y函数依赖于X,记作 X→Y
函数依赖的确定:根据语义
①X→Y,但Y⊄X,则称X→Y是非平凡的函数依赖
②X→Y,但Y⊆X,则称X→Y是平凡的函数依赖
③若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素
④若Y不函数依赖于X,则记作X
↛
\nrightarrow
↛Y
2.完全函数依赖、部分函数依赖
①在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’
↛
\nrightarrow
↛Y,则称Y对X完全函数依赖,记作X
→
F
\xrightarrow{F}
FY【完全函数依赖X
→
F
\xrightarrow{F}
FY:X中属性缺一不可,全都齐了才能推Y】
②若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X
→
P
\xrightarrow{P}
PY【部分函数依赖X
→
P
\xrightarrow{P}
PY:X中只需要部分属性即可推Y】
3.传递函数依赖
在R(U)中,如果X→Y(Y⊄X),Y
↛
\nrightarrow
↛X,Y→Z,Z⊄Y则称Z对X传递函数依赖,记为X
→
传递
\xrightarrow{传递}
传递Z
码
1.候选码:恰好能表示出所有元素。K为R<U,F>中的属性或属性组合,若K
→
F
\xrightarrow{F}
FU,则K为R的候选码。
2.超码:候选码的超集
3.主码(主键):候选码多于一个,从候选码中任意挑出一个称为主码(主键)
4.主属性:包含在任何一个候选码中的属性
非主属性:不包含在任何一个候选码中的属性
5.全码:所有属性均为候选码
求候选码
①只出现在左边的元素,属于候选码
②只出现在右边,一定不属于候选码
③左右都出现的,不一定。
对①+③求闭包,若能推出所有元素,则该组合是候选码
例题1:
答案:
解题:
范式
第一范式:1NF
所有字段值都是不可再分的原子值
第二范式:2NF
一个表中只有一种数据,不能有多张表的数据
第三范式:3NF
数据表中每一列数据都与主键直接相关,而不能间接相关。
BC范式
巴斯-科德范式(BCNF),修正的第三范式。不能有循环传递的函数依赖,推到最后又推回自己了,是不可以的。【不存在传递的依赖】
例题:
闭包 F+
最小函数依赖集
第 7 章 数据库设计
数据库设计的步骤
①需求分析
②概念结构设计
③逻辑结构设计
④物理结构设计
⑤数据库实施
⑥数据库运行和维护
【数据库设计是一个循环反复的过程,不是一蹴而就的,而是要在数据库系统运行的过程中不断对其进行评估、调整与修改】
ER图
①实体:长方形
②属性:椭圆形
③关系:菱形
①1:1
②1:N
把关系上的属性、1那边的主键(作为外码),都加到N那头实体的属性里
③N:M
把中间的关系拿出来作为一个实体
例题1:关系模型→ER图
例题2:ER图转关系模型
第8章 数据库编程(水)
突破SQL语言局限性的三种技术方案:
1.利用高级语言的表达能力:嵌入式SQL
2.扩展SQL语言对于过程控制的表达能力:过程化SQL
3.在一个更大的视野上,将数据库看做是一类数据源:ODBC编程
1.嵌入式SQL
利用高级语言的表达能力:嵌入式SQL
EXEC SQL <SQL语句>
游标
游标是数据库系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。
每个游标区都有一个名字,也可以理解为该数据区的指针可以用SQL语句逐一从游标中(指针所指示的位置)获取记录并赋给主变量,交由主语言进一步处理。
2.过程化SQL
3.ODBC
第9章 关系查询处理和查询优化(水)
查询处理过程
1.查询分析
2.查询检查
3.查询优化
4.查询执行
查询优化
1.代数优化
启发式代数优化
优化树
2.物理优化
①基于规则的存取路径优化
②基于代价的优化
事务处理(transaction processing)技术 10-11章
事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理技术主要包括数据库恢复技术和并发控制技术。
第10章 数据库恢复技术
1.事务(transaction)
1.定义:事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
2.事务的ACID特性(ACID properties)
①原子性 (Atomicity):要么全做,要么全不做
②一致性 (Consistency):与原子性高度一致,需要两边都有操作才行
③隔离性 (Isolation):一个事务的执行,不能被其他事务所干扰
④持续性 (Durability) / 永久性(Permanence):数据库的改变是永久的。不能数据库内部自己就发生了变化
保持事务ACID特性是事务管理的重要任务。事务ACID特性可能遭到破坏的因素有:
(1)事务在运行过程中被强行停止
(2)多个事务并行运行时,不同事务的操作交叉执行
这就涉及到数据库的恢复机制和并发控制机制
MySQL拓展:隔离性的隔离级别
原文链接:鱼皮的微信公众号
3.故障的种类
①事务内部故障:采用REDO和UNDO
②系统故障:系统突然停转,系统需要重启
③介质故障:硬件损坏
④计算机病毒
例题:
4.数据库 恢复机制
(1)数据转储 (backup)
(2)登记日志文件 (logging)
①日志文件的格式和内容
②日志文件的作用
③登记日志文件
5.恢复策略
(1)事务故障的恢复:UNDO(做到一半的,撤销)
(2)系统故障的恢复:UNDO+REDO(丢失的重做,做到一半的撤销)
(3)介质故障的恢复:重装后援副本+REDO
6.具有检查点的恢复技术
T2从检查点开始REDO就行,不必全部重做。
7.数据库镜像 (mirror)
频繁复制数据导致系统效率低,一般只镜像关键数据和日志文件
第11章 并发控制技术
1.串行执行 (单处理机)
2.交叉并发执行 (单处理机),提高了系统资源的利用率。
3.同时并发执行 (多处理机)
1.并发控制概述
1.并发操作可能带来的3种数据不一致
(1)丢失修改 (lost update) (修改-修改 冲突)
(2)不可重复读 (non-repeatable read) (读-更新 冲突)
①读-修改
②读-插入
③读-删除 (②③称为 幻影现象)
(3)读“脏”数据 (dirty read) (修改-读 冲突)
记号:
R(x)
:读数据x
W(x)
:写数据x
2.并发控制的主要技术
(1)封锁 (locking)
(2)时间戳 (timestamp)
(3)乐观控制法 (optimistic scheduler)
(4)多版本并发控制 (multi-version concurrency control,MVCC)
2.封锁
1.封锁的定义:对数据对象进行加锁,在其释放锁之前,其他事务不能更新此数据对象。
2.锁的类型
(1)排他锁:X锁 (exclusive locks)、写锁
若事务T对数据对象A加X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。
(2)共享锁:S锁 (share locks)、读锁
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直至T释放A上的S锁为止。
3.封锁类型的相容矩阵
3. 三级封锁协议
1.封锁协议的定义:何时申请锁、持锁时间、何时释放的约定规则。
2.封锁协议的类型
(1)一级封锁协议
①一级封锁协议的定义:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括 正常结束(COMMIT)、非正常结束(ROLLBACK)。
②功能:一级封锁协议可防止 i.丢失修改,并保证事务T是可恢复的。但不能防止 不可重复读和读脏数据。
(2) 二级封锁协议
①二级封锁协议的定义:在一级封锁协议的基础上,增加事务T在读取数据R之前必须先对其加S锁,读完立即释放S锁。(一级封锁协议 + 短读锁)
②功能:二级封锁协议可防止 i.丢失修改、ii.读脏数据,但由于加的读锁是短锁,不能防止不可重复读
(3) 三级封锁协议
①定义:一级封锁协议加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。(一级封锁协议 + 长读锁)
②功能:可防止丢失修改、读脏数据、不可重复读
4.活锁和死锁
1.活锁
解决活锁的方法:先来先服务(FCFS)
2.死锁
(1)死锁预防
①一次封锁法
i.定义:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
ii.缺点:1)过早加锁,降低系统并发度,降低了系统的效率 2)难以确定所有要加锁的对象
②顺序封锁法
i.定义:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁。
ii.缺点:1)维护成本高 2)难以实现
(2)死锁的诊断和解除
①超时法
1)定义:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
2)优点:实现简单
缺点:i.可能误判死锁 ii.时限若设置得过长,死锁发生后不能及时发现
②等待图法
1)死锁诊断:等待图中出现了回路,则说明产生了死锁。
(b)图中,T1等待T2,T2等待T3,T3等待T2和T4,T4等待T1。A→B意思为A等待B释放锁。
2)死锁解除
撤销一个代价最小的事务,破除等待环
5.并发调度的可串行性
1.串行调度:串行地调度
2.可串行性调度:执行效果和串行调度相同
3.冲突操作:读-写冲突、写-写冲突(对同一个数据对象进行操作,至少有一个写,才冲突)。读-读不冲突。
4.冲突可串行化的调度
(1)定义:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc为冲突可串行化的调度。
(2)冲突可串行化调度
→
充分
\xrightarrow{充分}
充分可串行化调度
6.两段锁协议
1.两段锁:
(1)第一阶段,获得封锁 (扩展阶段,只获得锁)
(2)第二阶段,释放封锁 (收缩阶段,只释放锁)
2.遵守两段锁协议 → 充分 \xrightarrow{充分} 充分可串行化调度
3.遵守两段锁协议不能保证防止死锁,但一次封锁法遵守两段锁协议。
4.两段锁协议与三级封锁协议
两类不同目的的协议。
①两段锁协议:保证并发调度的正确性
②三级封锁协议:在不同程度上保证数据一致性
遵守三级封锁协议 → 必然遵守两段锁协议,→ 必然是可串行化调度。
7.封锁的粒度
1.定义:封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。
2.封锁力度与系统并发度和并发控制的开销密切相关:
①封锁的粒度越大,数据库所能够封锁的数据单元越少,并发度越小,系统开销越小。
②封锁的粒度越小,并发度越高,系统开销越大。
多粒度封锁
1.定义:在一个系统中支持对多种封锁粒度提供不同的事务选择
2.多粒度树:根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。有n层就是n级粒度树。
3.显式封锁:直接加到数据对象上的锁
4.隐式封锁:因上级结点加了(显式)锁,而使得该数据对象加了(隐式)锁
意向锁
1.定义:若要对任一结点加锁,必须先对它的上层结点加意向锁。
2.分类
(1)IS锁
若要对某结点加S锁,则要先从其根结点至父结点依次加IS锁,最后才能对该结点加S锁。
(2)IX锁
若要对某结点加X锁,则要先从其根结点至父结点依次加IX锁,最后才能对该结点加X锁。
(3)SIX锁
想读一个数据对象,并更新它的后代结点,加SIX锁 (SIX = S + IX,所有后代都加隐式S锁,某些后代加X锁)。
(4)加入3种意向锁后的相容矩阵,沿对角线对称
(5)锁的强度
1.锁的强度:它对其他锁的排斥程度。依次为 ①X②SIX③S /IX ④IS
2.一个事务在申请封锁时以强锁代替弱锁是安全的,以弱锁代替强锁是不安全的。
(6)含有意向锁的多粒度树
①申请锁时应该自上而下
②释放锁时应该自下而上
新技术篇
第13章 数据库技术发展概述
1.第一代数据库系统:
第二代数据库系统:
第三代数据库系统:
One Size Does Not Fit All
按照应用需求与系统功能分,可以有各种不同类型的系统
第14章 大数据管理
第15章 内存数据库系统
1.定义:使用内存作为常规数据存储设备的数据库系统,简称为IMDB(In-MemoryDatabase)或MMDB(Main-Memory Database)