文章目录
- 数据库期末复习之例题汇总
- 第1讲 绪论
- 第2讲 关系数据库
- 笛卡尔积 – P13
- 关系模式 - P29
- 实体完整性 - P42
- 关系间的引用 例2.1 - P46
- 关系间的引用 例2.2 - P47
- 关系间的引用 例2.3 - P48
- 外码 例2.1 - P50
- 外码 例2.2 - P51
- 外码 例2.3 - P52
- 参照完整性规则 延申 - P55
- 用户定义的完整性 - P60
- 集合运算 并(Union) - P66
- 集合运算 差(Difference) - P68
- 集合运算 交(Intersection) - P70
- 关系运算 笛卡尔积 - P72
- 象集 - P78
- 选择 例2.4 例2.5 - P85
- 投影 例2.6 例2.7 - P88
- 连接 例2.8 - P94
- 外连接 例2.8延申 - P100
- 除运算 例2.9 - P104
- 综合举例 - P106
- 第3讲 关系数据库标准语言 SQL
- 定义模式 例3.1 例3.2 - P28
- 定义模式和表 例3.3 - P30
- 删除模式 例3.4 - P32
- 定义基本表 例3.5-3.7 - P35
- 修改基本表 例3.8-3.10 - P45
- 删除基本表 例3.11-3.12 P48
- 建立索引 例3.13 - P56
- 修改索引 例3.14 - P57
- 删除索引 例3.15 - P68
- 查询表中若干列 例3.16-3.17 - P66
- 查询全部 例3.18 - P67
- 查询计算值 例3.19-3.20 - P68
- 查询-消除重复 例3.21 - P72
- 查询-比较大小 例3.22-3.24 - P75
- 查询-范围 例3.25-3.26 - P76
- 查询-确定集合 例3.27-3.28 - P77
- 查询-字符匹配 例3.29-3.35 - P79
- 查询-涉及空值 例3.37 - P83
- 查询-多重条件 例3.38 - P84
- 查询-排序 例3.39-3.40 - P88
- 查询-聚集函数 例3.41-3.45 - P91
- 查询-分组 例3.46-3.48 - P95
- 查询-自然连接 例3.50 - P108
- 查询-非等值连接 例3.51 - P109
- 查询-自身连接 例3.52 - P111
- 查询-外连接 例3.53 - P116
- 查询-多表连接 例3.54 - P119
- 查询-嵌套-IN 例3.55-3.56 - P126
- 查询-嵌套-比较 例3.57 - P133
- 查询-嵌套-ALL/ANY 例3.58-3.59 - P141
- 查询-嵌套-EXISTS(难点) 例3.60-3.63 - P150
- 查询-集合操作 例3.64-3.68 - P161
- 查询-派生表 例3.57+3.60 - P170
- 插入元组 例3.69-3.71 - P184
- 插入子查询结果 例3.72 - P188
- 修改一个元组的值 例3.73 - P193
- 修改多个元组的值 例3.74 - P194
- 带子查询的修改 例3.75 - P195
- 删除一个元组的值 例3.76 - P200
- 删除多个元组的值 例3.77 - P201
- 带子查询的删除 例3.78 - P202
- 空值的产生 例3.79-3.80 - P205
- 空值的判断 例3.81 - P207
- 空值的运算 例3.82-3.83 - P211
- 建立试图 例3.84-3.90 - P221
- 删除视图 例3.91 - P230
- 查询视图 例3.92-3.94 - P233
- 更新视图 例3.95-3.97 - P239
- 第4讲 数据库安全性
- 第5讲 数据库完整性
- 第6讲 关系数据理论
- 第7讲 数据库设计
- 第8讲 数据库编程
- 第9讲 关系查询处理和查询优化
- 第10讲 数据库恢复技术
- 第11讲 并发控制
数据库期末复习之例题汇总
第1讲 绪论
数据 - P11
层次模型 - P69
树形结构,双亲唯一,一对多
网状结构 - P81
可以多对多
模式与实例 - P101
实例是模式的一个具体值
第2讲 关系数据库
笛卡尔积 – P13
其中,每一个元素称为元组,如(张清玖,计算机专业,李勇)
元组中每一个值叫分量,如张清玖,计算机专业,李勇
基数计算方法则是每个域中值的个数的乘积
关系模式 - P29
R(U, D, DOM, F)
R:关系名
U:组成该关系的属性名集合
D:U中属性所来自的域
DOM:属性向域的映像集合
F:属性间数据的依赖关系的集合
实体完整性 - P42
关系间的引用 例2.1 - P46
关系间的引用 例2.2 - P47
关系间的引用 例2.3 - P48
外码 例2.1 - P50
F是R的外码
- F是基本关系R的一个或一组属性,但不是关系R的码
- F与基本关系S的主码Ks相对应
R:参照关系
S:被参照关系 / 目标关系
通俗的讲外码就是只是参照关系里的普通属性(非码),但是却和被参照关系里的主码对应
外码 例2.2 - P51
外码 例2.3 - P52
参照完整性规则 延申 - P55
对应参照完整性规则2.2
外码要么取空值要么取等于S中某个元组的主码值
用户定义的完整性 - P60
个人理解是满足语义要求即可
集合运算 并(Union) - P66
R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R \cup S = \{ t|t \in R \vee t \in S \} R∪S={t∣t∈R∨t∈S}
集合运算 差(Difference) - P68
R − S = { t ∣ t ∈ ∧ t ∉ S } R-S = \{ t | t \in \wedge t \notin S \} R−S={t∣t∈∧t∈/S}
集合运算 交(Intersection) - P70
R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S = \{ t|t \in R \wedge t \in S \} R∩S={t∣t∈R∧t∈S}
关系运算 笛卡尔积 - P72
R × S = { t r ⌢ t s ∣ t r ∈ R ∧ t s ∈ S } R \times S= \{ t_r\frown t_s | t_r \in R \wedge t_s \in S \} R×S={tr⌢ts∣tr∈R∧ts∈S}
象集 - P78
Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x = \{ t[Z] | t\in R, t[X]=x \} Zx={t[Z]∣t∈R,t[X]=x}
表示R中属性组X上值为x的诸元组再Z上分量的集合
选择 例2.4 例2.5 - P85
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } σ_F(R) = \{ t|t \in R ∧ F(t)= '真' \} σF(R)={t∣t∈R∧F(t)=′真′}
投影 例2.6 例2.7 - P88
π A ( R ) = { t [ A ] ∣ t ∈ R } π_A(R) = \{ t[A] | t \in R \} πA(R)={t[A]∣t∈R}
A:R中的属性列
连接 例2.8 - P94
看图,不解释
外连接 例2.8延申 - P100
悬浮元组:在自然连接中未被连接的元组
外连接:吧悬浮元组保存在结果关系中,在其他属性上填空值(NULL)
左外连接:只保留左边关系R中的悬浮元组
由外连接:只保留右边关系S中的悬浮元组
除运算 例2.9 - P104
R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ π Y ( S ) ⊆ Y x } R \div S= \{ t_r[X]|t_r \in R∧π_Y(S) \subseteq Y_x \} R÷S={tr[X]∣tr∈R∧πY(S)⊆Yx}
Y x Y_x Yx:X在R中的象集, x = t r [ X ] x=t_r[X] x=tr[X]
a1的象集{(b1,c2), (b2,c3), (b2,c1)}
a2的象集{(b3,c7), (b2,c3)}
a3的象集{(b4,c6)}
a4的象集{(b6,c6)}
S在(B,C)上的投影{(b1,c2), (b2,c1), (b2,c3)}
只有a1的象集包含S的投影集,故结果为a1
综合举例 - P106
第3讲 关系数据库标准语言 SQL
定义模式 例3.1 例3.2 - P28
定义模式实际上是定义一个命名空间,在其中可以定义数据库对象(基本表、试图、索引等)
定义模式和表 例3.3 - P30
删除模式 例3.4 - P32
CASCADE(级联):删除模式的同时删除模式中所有数据库对象
RESTRICT(限制):如果模式中定义了下属的数据库对象,则拒绝执行删除;只有当没有下属对象时才能删除。
定义基本表 例3.5-3.7 - P35
修改基本表 例3.8-3.10 - P45
ADD:增加新列、新列级完整性约束条件和新表级完整性约束条件
DROP COLUMN:用于删除表中的列
DROP CONSTRAINT:用于删除指定的完整性约束条件
ALTER COLUMN:用于修改原有的列定义
删除基本表 例3.11-3.12 P48
RESTRICT:存在依赖该表的对象,则不能删除
CASCADE:删除表的同时,删除相关依赖对象
建立索引 例3.13 - P56
修改索引 例3.14 - P57
删除索引 例3.15 - P68
查询表中若干列 例3.16-3.17 - P66
查询全部 例3.18 - P67
查询计算值 例3.19-3.20 - P68
查询-消除重复 例3.21 - P72
查询-比较大小 例3.22-3.24 - P75
查询-范围 例3.25-3.26 - P76
查询-确定集合 例3.27-3.28 - P77
查询-字符匹配 例3.29-3.35 - P79
查询-涉及空值 例3.37 - P83
这里的is不能用**=**代替
查询-多重条件 例3.38 - P84
and优先级高于or
查询-排序 例3.39-3.40 - P88
升序:ASC
降序:DESC
缺省为升序
查询-聚集函数 例3.41-3.45 - P91
查询-分组 例3.46-3.48 - P95
GROUP BY 分组
HAVING短语与WHERE子句作用对象不同
- WHERE作用于基本表或试图
- HAVING短语作用组
GROUP BY的作用感觉PPT上写的有点模糊,可以看这里:https://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html
查询-等值连接 例3.49 - P102
查询-自然连接 例3.50 - P108
查询-非等值连接 例3.51 - P109
查询-自身连接 例3.52 - P111
查询-外连接 例3.53 - P116
外连接会将主题表中不满足连接条件的元组一并输出而普通连接不会
查询-多表连接 例3.54 - P119
查询-嵌套-IN 例3.55-3.56 - P126
查询-嵌套-比较 例3.57 - P133
查询-嵌套-ALL/ANY 例3.58-3.59 - P141
查询-嵌套-EXISTS(难点) 例3.60-3.63 - P150
3.62的思路可以先看3.63
下面两个式子要记住:
$(\forall ) P \equiv \neg ( \exist x (\neg P) ) $
$p \rightarrow q \equiv \neg p \vee q $
查询-集合操作 例3.64-3.68 - P161
并:UNION
交:INTERSECT
差:EXCEPT
查询-派生表 例3.57+3.60 - P170
在FROM里面加个子查询并将查询结果作为一个新表
插入元组 例3.69-3.71 - P184
插入子查询结果 例3.72 - P188
修改一个元组的值 例3.73 - P193
修改多个元组的值 例3.74 - P194
带子查询的修改 例3.75 - P195
删除一个元组的值 例3.76 - P200
删除多个元组的值 例3.77 - P201
带子查询的删除 例3.78 - P202
空值的产生 例3.79-3.80 - P205
空值的判断 例3.81 - P207
NOT NULL 和 UNIQUE 和 码属性 不能取空值
空值的运算 例3.82-3.83 - P211
空值算数运算为空值 空值比较运算为UNKNOWN
建立试图 例3.84-3.90 - P221
删除视图 例3.91 - P230
如果一个试图上还导出了其他试图,使用CASCADE级联删除
查询视图 例3.92-3.94 - P233
试图消解法
- 进行有效性检查
- 转换成等价的对基本表的查询
- 执行修正后的查询
更新视图 例3.95-3.97 - P239
第4讲 数据库安全性
授权 例4.1-4.7 - P50
WITH GRANT OPTION 可传播权限,如果没有这句话默认不可传播
回收权限 例4.8 - P58
创建用户 - P63
数据库角色 例4.11-4.13 - P72
数据库角色:被命名的一组与数据库操作相关的权限
- 角色是权限的集合
- 可以为一组具有相同权限的用户创建一个角色
- 简化授权过程
视图机制 例4.14 - P86
审计 例4.15-4.16 - P95
第5讲 数据库完整性
实体完整性定义 例5.1-5.2 - P12
两个字段作为联合主键,这两个变量可以有重复,但是不能两个同时重复。
比如说我们拿id和name作为联合主键,name可以重复,id也可以重复,但是不能有两个元组同时拥有一样的id和name。
参照完整性 例5.3 - P23
破坏参照完整性
- SC表中增加一个元组,该元组的Sno值在Student表中找不到一个元组的Sno值与之对应
- 修改SC表中一个元组,修改后找不到元组与之对应
- 从Student表中删除一个元组,删除后SC表中元组Sno值找不到对应
- 修改Student表中一个元组,修改后SC表中元组Sno值找不到对应
参照完整性违约处理 例5.4 - P30
处理方式
- NO ACTION : 拒绝执行
- CASCADE : 级联操作
- SET_NULL : 设置为空值
属性上约束条件的定义 例5.5-5.8 - P37
定义属性上的约束条件
- NOT NULL : 列值非空
- UNIQUE : 列值唯一
- CHECK : 检查列值是否满足一个条件表达式
元组上约束条件的定义 例5.9 - P44
元组级的约束可设置不同属性之间的取值的相互约束条件
不满足条件拒绝执行
完整性约束命名子句 例5.10-5.13 - P48
断言 例5.18-5.20 - P54
删除断言:DROP ASSERTION <断言名>;
定义触发器 例5.21-5.23 - P67
语法样式
触发事件
- INSERT, DELETE, UPDATE
- AFTER / BEFORE 表示触发时间(在事件发生前后)
触发器类型
- FOR EACH ROW : 行级触发器
- FOR EACH STATEMENT : 语句级触发器
触发条件
- 缺省WHEN,则触发器激活后立即执行
激活触发器
- 事件触发
- 多个触发器
- 执行该表上BEFORE触发器
- 激活触发器的SQL语句
- 执行该表上的AFTER触发器
删除触发器
- DROP TRIGGER <触发器名> ON <表名>;
第6讲 关系数据理论
问题的提出 例6.1 - P12
Student<U,F>中存在的问题
U:属性,F:属性上的一组数据依赖
- 数据冗余:系主任名字重复出现
- 更新异常:更换系主任要改好多次
- 插入异常:一个系刚成立无学生,则无法存入系主任信息
- 删除异常:删除所有学生的信息时,会把系和系主任一起删了
解决:
函数依赖 - P25
这里有错误,应该是圈出两个S1
函数依赖:X→Y(X确定Y / Y依赖于X):不可能存在一个元组,X上值相等而Y上值不等
完全函数依赖与部分函数依赖 - P32
F:完全函数依赖
- X里面任何一个真子集都不能确定Y
P:部分函数依赖
- X中存在一个真子集能确定Y
平凡的函数依赖
- Y是X的一个子集
非平凡的函数依赖
- Y不是X的一个子集
传递函数依赖 - P33
码 例6.2-6.3 - P37
候选码(Candidate Key):K为R<U,F>中的属性或属性组合且U完全依赖于K,则K为R的一个候选码
超码(Superkey):U部分依赖于K,则K为超码
主码(Primary key):若关系模式R有多个候选码,则选一个为主码
主属性(Prime attribute):包含在任何一个候选码中的属性
非主属性(Nonprime attribute)或非码属性(Non-key attribute):不包含在任何码中的属性
全码(All-key):整个属性组是码
外码 - P38
2NF 例6.4 - P43
2NF要求每个主属性都必须完全依赖于任何一个候选码
3NF - P49
3NF要求无传递依赖
BCNF 例6.5-6.8 - P53
BCNF:每一个决定属性集都包含候选码
多值依赖 例6.9 - P60
缺点:
- 数据冗余度大
- 增加操作复杂性
- 删除操作复杂
- 修改操作复杂
原因:存在多值依赖
不得不说,数据库在定义说明上有一手的,属实难理解。
个人理解:
就拿上面这个例子来说,我们可以取很多个(C,B),C相同,B不同,此时T都有一组值与之对应。
说白了就是对于(X,Y,Z)一个X对应多个Y,然后一组(X,Z)对应多个Y。
如果实在不理解就采用最简单粗暴的方式,X→→Y中一个X对应多个Y
补充:多值依赖的性质 P74
多值依赖于函数依赖区别:
XY为W的子集,W为U的子集
- X→→Y 在U上成立,则W上一定成立
- X→→Y 在W上成立,在U上未必成立
- 这个实际上就是大范围推小范围
Y‘为Y的真子集
X→Y 则 X→Y’
X→→Y 不能断言 X→→Y’
4NF - P82
第7讲 数据库设计
E-R模型 - P60
为啥这里的一个联系名用的是仓库
概念结构涉及 例1-3 - P73
概念结构设计 例7.1 - P76
ER图-合并 - P87
ER图-消除冗余 - P89
ER图-视图集成
ER图转换关系模型 - P107
聚簇存取方法 - P141
数据存放位置 - P150
第8讲 数据库编程
数据库连接+游标 例8.1 - P26
建立数据库连接
- EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
- target为要连接的数据库服务器
- connect-name是可选的连接名
关闭数据库连接
- EXEC SQL DISCONNECT [connection];
不用游标 例8.2 - P33
用into子句指定存放查询结果的主变量
查询结果为单记录的SELECT语句 例8.3 - P35
非CURRENT形式的增删改语句 例8.4-8.5 - P36
对于多条记录等的必须使用游标
说明游标
EXEC SQL DECLARE <游标名> CURSOR FOR <SELECT 语句>;
打开游标
EXEC SQL OPEN <游标名>;
推进游标指针并取当前记录
EXEC SQL FETCH <游标名> INTO <主变量>[<指示变量>] [,<主变量>[<指示变量>]]…;
关闭游标
EXEC SQL CLOSE <游标名>;
动态SQL 例8.6-8.7 - P53
存储过程的用户接口 例8.8-8.9 - P79
看看就好,感觉应该不会考吧
创建、执行、修改和删除的代码见PPT - P78 P83 P85
函数见PPT - P88
ODBC工作流程 例8.11-8.12 - P118
操作步骤
- 配置数据源
- 初始化环境
- 建立连接
- 分配语句句柄
- 执行SQL语句
- 结果集处理
- 中止处理
这个简单看吧 这个排版有点糟糕,建议看书,书上的排版赏心悦目
第9讲 关系查询处理和查询优化
选择操作的实现 例9.1 - P18
连接操作的实现 例9.2 - P24
查询优化 例9.3 - P43
这个其实不难理解,先选择完再连接的消耗比连接完再选择要低得多。
PS:连接操作时查询处理中最耗时的操作之一 - P24
通过索引来选择比顺序查找效率高。
查询树的启发式优化 例9.4 - P73
第10讲 数据库恢复技术
事件-一致性于原子性 - P13
数据库的ACID特性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 不可被干扰
- 持续性(Durability)
- 一旦事物被提交,改变为永久性的
恢复的实现技术 - P41 P57
恢复的实现技术
- 数据转储
- 登记日志文件
检查点 - P83
第11讲 并发控制
并发控制-不一致性 例11.1 - P11
丢失修改
不可重复读
脏数据 - P20
一级封锁 - P35
一级封锁:事务T在修改R之前必须加X锁,知道事务结束才释放
- 没有共享锁,所以不能保证可重复性读和不读脏数据
二级封锁 - P37
二级封锁:一级封锁协议加上事务T在读数据R之前必须对其加S锁,读完即可释放S锁
- 读完数据即可释放S锁,不能保证可重复性读
三级封锁协议 - P39
三级封锁:一级封锁加上事务T在读数据R之前必须先对其加S锁,知道事务结束才可释放
- 三级封锁可防止丢失修改、读脏数据和不可重复读
可串行化调度 例11.2 - P67
冲突可串行化 例11.3-11.4 - P76
两段锁协议 - P81
两阶段:
- 一阶段:只能获得锁
- 二阶段:只能释放锁
两段锁仍然可能发生死锁:两段锁不是一次性对要用的数据全部加锁
封锁粒度 - P89
意向锁 - P107
IS锁:对后裔结点加S锁
IX锁:对后裔结点加X锁
SIX锁:加S锁,再加IX锁