数据库系统概论
复习指南
作者:FuZY
时间:June 10, 2025
版本:V1-正式版
Q 群:1019314204
数据的连接构成关系,知识的联系组成思维。
前言
资料说明
本书参考了《数据库系统概论(第 6 版)》的内容,方便学习和复习数据库系统的相关知识。
本书的内容主要包括数据库系统概述、数据库设计、关系模型、SQL 语言、事务处理和并发控制等方面
的内容。
使用说明
本资料仅供学习和交流使用,禁止用于任何商业用途。
本资料的内容仅供参考,作者不对任何因使用本资料而产生的后果负责。
禁止将本资料用于任何不正当的用途,包括但不限于考试作弊、抄袭等行为。
资料备份
Github 连接:https://ifuzyi.github.io/NOTES/数据库系统概论.html
网站连接:https://study.fuzy.site
QQ 群:1019314204
FuZY
2025 6 1
目录
1 章 数据库系统概述 1
2 章 关系数据模型 3
2.1 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 关系代数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 SQL 语言 6
3.1 数据定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.1 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.3 索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 数据查询 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 SELECT 语句. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2 WHERE 查询条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.3 ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.4 聚集函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.5 GROUP BY HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.6 LIMIT OFFSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.7 嵌套查询 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.8 集合查询 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.9 外连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 章 关系数据理论 15
4.1 函数依赖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.3 范式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4 Armstrong 公理系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.5 模式分解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 章 数据库设计 20
5.1 E-R 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.1.1 基本组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.1.2 联系的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 E-R 模型转换为关系模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6 章 数据库恢复技术 22
6.1 事务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2 恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7 章 并发控制 26
7.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
7.2 封锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.3 并发调度的可串行性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.4 两段锁协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
ii
1 数据库系统概述
1 数据库系统概述
数据库的 4 个基本概念
数据 (data)
数据库 (database, DB)
数据库管理系统 (database management system, DBMS)
数据库系统 (database system, DBS)
数据库管理系统的主要功能
1. 数据定义功能
2. 数据组织、存储和管理功能
3. 数据操纵功能
4. 数据库的事务管理和运行管理功能
5. 数据库的建立和维护功能
6. 其他功能
数据库系统的特点
1. 数据的结构化
2. 数据的共享性强,冗余度低且易扩充
3. 数据独立性强
4. 数据由数据库管理系统统一管理和控制
数据的安全性保护
数据的完整性检查
数据的并发性控制
数据库的恢复
1
1 数据库系统概述
三级模式结构
模式:所有用户的公共数据视图
外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述
内模式:数据库的物理结构和存储方式的描述,是数据在数据库内部的组织方式
2
2 关系数据模型
2 关系数据模型
2.1 基本概念
关系(数据结构)
关系:一张表
元组:表中的一行
属性:表中的一列
码:表中的某个属性组,可以唯一确定一个元组
域:一组具有相同数据类型的值的集合
分量:元组中的一个属性值
关系模式:对关系的结构描述,一般表示为 关系名(属性 1,属性 2,……,属性 n
1. 列是同质的,即每一列中的分量是同一类型的数据,来自同一个域
2. 不同的列可出自同一个域(域是一组具有相同数据类型的值的集合)
3. 列的顺序无所谓,列的次序可以任意交换
4. 任意两个元组的候选码不能相同
5. 行的顺序无所谓,行的次序可以任意交换
6. 分量必须取原子值(规范化)
关系(数据操作)
关系代数:关系表达式
集合运算:并、差、交、笛卡尔积
关系运算:选择(行)、投影(列)、连接和自然连接(行列)、除(行列)
查询
更新(插入、删除、修改)
3
2 关系数据模型 2.2 关系代数
关系的完整性约束
实体完整性:
现实含义:事物(元组)可区分、是唯一的
实现:主键
内容:主属性不能取空值(或:主键值唯一、非空)
SQL 实现:Primary Key
参照完整性:
现实含义:不能引用不存在的事物
实现:外键
内容:外键值或者等于一个已经存在的主键值,或取空值
SQL 实现:Foreign Key
用户定义的完整性:
现实含义:某一具体应用所涉及的数据必须满足的语义要求
实现:第五章的完整性实现方法
SQL 实现:Check,……
2.2 关系代数
集合运算
并:𝑅 𝑆 = {𝑡|𝑡 𝑅 𝑡 𝑆}
差:𝑅 𝑆 = {𝑡|𝑡 𝑅 𝑡 𝑆}
交:𝑅 𝑆 = {𝑡|𝑡 𝑅 𝑡 𝑆}
笛卡尔积:𝑅 × 𝑆 = {
˜
𝑡
𝑟
𝑡
𝑠
|𝑡
𝑟
𝑅 𝑡
𝑠
𝑆}
关系运算
选择(行)
𝜎
𝐹
(
𝑅
)
=
{
𝑡
|
𝑡
𝑅
𝐹
(
𝑡
)
=
}
投影(列)Π
𝐴
(𝑅) = {𝑡 [𝐴]|𝑡 𝑅}
连接:𝑅 ⊲
𝐴𝜃 𝐵
𝑆 = {
˜
𝑡
𝑟
𝑡
𝑠
|𝑡
𝑟
𝑅 𝑡
𝑠
𝑆 𝑡
𝑟
[𝐴]𝜃𝑡
𝑠
[𝐵]}
自然连接:𝑅 𝑆 = {
˜
𝑡
𝑟
𝑡
𝑠
[𝑈 𝑋]|𝑡
𝑟
𝑅 𝑡
𝑠
𝑆 𝑡
𝑟
[𝑋] = 𝑡
𝑠
[𝑋]}
除:𝑅 ÷ 𝑆 = {𝑡
𝑟
[𝑋]|𝑡
𝑟
𝑅 Π
𝑌
(𝑆) 𝑌
𝑋
}
𝑅(𝑋, 𝑌)𝑆(𝑌 , 𝑍)𝑌
𝑋
𝑥 𝑅 中的象集,𝑥 = 𝑡
𝑟
[𝑋]𝑌
𝑋𝑖
= Π
𝑌
(𝜎
𝑡
𝑟
[𝑋]=𝑥
𝑖
(𝑅)), 𝑥
𝑖
𝑥
4
2 关系数据模型 2.2 关系代数
例题 2.1.
供应商表:𝑆(𝑆𝑁𝑂, 𝑆𝑁 𝐴𝑀 𝐸, 𝑆𝑇 𝐴𝑇𝑈𝑆, 𝐶 𝐼𝑇𝑌 )
零件表:𝑃(𝑃𝑁𝑂, 𝑃𝑁 𝐴𝑀 𝐸, 𝐶𝑂𝐿𝑂𝑅, 𝑊 𝐸𝐼𝐺𝐻𝑇 )
工程项目表:𝐽 (𝐽 𝑁𝑂, 𝐽 𝑁 𝐴𝑀 𝐸, 𝐶 𝐼𝑇𝑌)
供应情况表:𝑆𝑃𝐽 (𝑆𝑁𝑂, 𝑃𝑁𝑂, 𝐽𝑁𝑂, 𝑄𝑇𝑌)
1. 求供应工程 J1 零件的供应商号码 SNO
2. 求供应工程 J1 零件 P1 的供应商号码 SNO
3. 求供应工程 J1 零件为红色的供应商号码 SNO
4. 求没有使用天津供应商生产的红色零件的工程号 JNO
5. 求至少用了供应商 S1 所供应的全部零件的工程号 JNO
1. Π
𝑆 𝑁 𝑂
(𝜎
𝐽 𝑁 𝑂=
𝐽1
(𝑆𝑃𝐽))
2. Π
𝑆 𝑁 𝑂
(𝜎
𝐽 𝑁 𝑂=
𝐽1
𝑃 𝑁𝑂=
𝑃1
(𝑆𝑃𝐽))
3. Π
𝑆 𝑁 𝑂
(𝜎
𝐽 𝑁 𝑂=
𝐽1
𝐶𝑂𝐿𝑂𝑅=
(𝑆𝑃𝐽 𝑃))
Π
SNO
(Π
SNO,PNO
(𝜎
JNO=‘J1’
(SPJ)) Π
PNO
(𝜎
COLOR=
(P)))
4. Π
𝐽 𝑁 𝑂
((𝐽) Π
𝐽 𝑁 𝑂
(𝜎
𝐶𝑂𝐿𝑂𝑅=
𝐶𝐼𝑇𝑌 =
(𝑆 𝑆𝑃𝐽 𝑃)))
5. Π
𝐽 𝑁 𝑂,𝑃𝑁 𝑂
(𝑆𝑃𝐽) ÷ Π
𝑃𝑁 𝑂
(𝜎
𝑆 𝑁 𝑂=
𝑆1
(𝑆𝑃𝐽))
5
3 SQL 语言
3 SQL 语言
3.1 数据定义
3.1.1 模式
模式的定义
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
模式的删除
DROP SCHEMA <模式名> [CASCADE | RESTRICT];
CASCADE(级联):删除模式下的所有对象
RESTRICT(限制):如果模式下有对象,则不删除
3.1.2
表的定义
CREATE TABLE <表名> (
<列名1> <数据类型1> [<列级完整性约束>],
<列名2> <数据类型2> [<列级完整性约束>],
...
<列名n> <数据类型n> [<列级完整性约束>],
[<表级完整性约束>]
);
列级完整性约束:
NOT NULL:列值不能为空
UNIQUE:列值唯一
CHECK:列值满足特定条件
DEFAULT:列的默认值
6
3 SQL 语言 3.1 数据定义
表级完整性约束:
PRIMARY KEY:主键约束,唯一且非空
PRIMARY KEY (<列名1>, <列名2>, ...);
FOREIGN KEY:外键约束,引用其他表的主键
FOREIGN KEY (<列名>) REFERENCES <引用表名>(<引用列名>);
CHECK:表级检查约束
CHECK (<条件>);
主码为单属性时,可直接在属性后的列级完整性约束条件中,使用 PRIMARY KEY 定义主码
表的修改
ALTER TABLE <表名>
[ADD <列名> <数据类型> [<列级完整性约束>]]
[ADD <表级完整性约束>]
[DROP <列名> [CASCADE | RESTRICT]]
[DROP CONSTRAINT <完整性约束名> [CASCADE | RESTRICT]]
[RENAME <旧列名> TO <新列名>]
[ALTER <列名> TYPE <数据类型>];
表的删除
DROP TABLE <表名> [CASCADE | RESTRICT];
CASCADE(级联):删除表及其所有数据
RESTRICT(限制):删除的基本表不能被其他表的约束所引用,不能有依赖该表的对象
3.1.3 索引
索引的定义
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名> (<列名1> [ASC | DESC], <列名2> [ASC | DESC], ...);
UNIQUE:索引值唯一
CLUSTERED:聚集索引,数据存储顺序与索引顺序一致
ASC:升序(默认)
DESC:降序
索引的修改
ALTER INDEX <
索引名
> [RENAME TO <
新索引名
>]
索引的删除
DROP INDEX <索引名> ;
7
3 SQL 语言 3.2 数据查询
3.2 数据查询
3.2.1 SELECT 语句
SELECT [ALL|DISTINCT] <目标列表达式>[别名][,<目标列表达式>[别名]]
FROM <表名或视图名>[别名][,<表名或视图名>[别名]|(SELECT 语句)[AS]<别名>]
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
[ LIMIT <行数1>[ OFFSET <行数2>]];
ALL:返回所有行(默认)
DISTINCT:去除重复行
3.2.2 WHERE 查询条件
比较运算符:=, <>, <, <=, >, >=
逻辑运算符:AND, OR, NOT
范围运算符:BETWEEN < 1> AND < 2>
集合运算符:IN (< 1>, < 2>, ...)
模糊匹配:LIKE ’< 模式 >’% 表示任意字符,_ 表示单个字符)
空值判断:IS NULL, IS NOT NULL
子查询:在 WHERE 子句中使用 SELECT 语句
3.2.3 ORDER BY
ORDER BY:对查询结果进行排序
ORDER BY <列名1> [ASC|DESC], <列名2> [ASC|DESC], ...;
ASC:升序(默认)
DESC:降序
3.2.4 聚集函数
COUNT():计数
COUNT(<列名>) COUNT(*)
SUM():求和
SUM(<列名>)
AVG():平均值
AVG(<
列名
>)
MAX():最大值
MAX(<列名>)
MIN():最小值
MIN(<列名>)
8
3 SQL 语言 3.2 数据查询
3.2.5 GROUP BY HAVING
GROUP BY:对查询结果进行分组
GROUP BY <列名1>, <列名2>, ...;
HAVING:对分组后的结果进行过滤
HAVING <条件表达式>;
HAVING 通常与聚集函数一起使用
HAVING GROUP BY 之后执行
3.2.6 LIMIT OFFSET
LIMIT:限制查询结果的行数
LIMIT <行数>;
OFFSET:跳过指定行数的结果
OFFSET <行数>;
LIMIT OFFSET 可以一起使用
LIMIT <行数1> OFFSET <行数2>;
3.2.7 嵌套查询
SELECTFROMWHERE 等子句中使用子查询
WHERE <列名> <条件表达式> (SELECT <列名> FROM <表名> WHERE <条件>);
ANY ALL 关键字
ANY:与子查询结果中的任意值进行比较
<列名> <运算符> ANY (SELECT <列名> FROM <表名>);
ALL:与子查询结果中的所有值进行比较
<列名> <运算符> ALL (SELECT <列名> FROM <表名>);
EXISTS:对主查询的每一行,检查子查询是否返回至少一行结果
WHERE EXISTS
(SELECT *
FROM <表名>
WHERE <条件>);
9
3 SQL 语言 3.2 数据查询
3.2.8 集合查询
UNION:合并两个查询结果,去除重复行
SELECT <列名1>, <列名2> FROM <1>
UNION
SELECT <列名1>, <列名2> FROM <2>;
UNION ALL:合并两个查询结果,保留重复行
SELECT <列名1>, <列名2> FROM <1>
UNION ALL
SELECT <列名1>, <列名2> FROM <2>;
INTERSECT:返回两个查询结果的交集
SELECT <列名1>, <列名2> FROM <1>
INTERSECT
SELECT <列名1>, <列名2> FROM <2>;
EXCEPT:返回第一个查询结果中不在第二个查询结果中的行
SELECT <列名1>, <列名2> FROM <1>
EXCEPT
SELECT <列名1>, <列名2> FROM <2>;
3.2.9 外连接
LEFT OUTER JOIN:左外连接,返回左表的所有行和右表匹配的行
SELECT 列名
FROM 1 LEFT [OUTER] JOIN 2 ON 1. = 2.
RIGHT OUTER JOIN:右外连接,返回右表的所有行和左表匹配的行
SELECT 列名
FROM 1 RIGHT [OUTER] JOIN 2 ON 1. = 2.
FULL OUTER JOIN:全外连接,返回左表和右表的所有行
SELECT 列名
FROM 1 FULL [OUTER] JOIN 2 ON 1. = 2.
CROSS JOIN
:笛卡尔积,返回左表和右表的所有组合
SELECT 列名
FROM 1 CROSS JOIN 2
NATURAL JOIN:自然连接,自动匹配同名列
SELECT 列名
FROM 1 NATURAL JOIN 2
10
3 SQL 语言 3.3 视图
3.3 视图
视图的定义
CREATE VIEW <视图名>[<列名1>, <列名2>, ...]
AS <子查询>
[ WITH CHECK OPTION];
WITH CHECK OPTION:确保插入、更新或删除操作满足视图的定义
视图的删除
DROP VIEW <视图名> [CASCADE | RESTRICT];
更新视图
UPDATE
UPDATE <视图名>
SET <列名1> = <新值1>, <列名2> = <新值2>, ...
WHERE <条件>;
INSERT
INSERT INTO <视图名> (<列名1>, <列名2>, ...)
VALUES (<1>, <2>, ...);
DELETE
DELETE FROM <视图名>
WHERE <条件>;
3.4 权限
GRANT:授予权限
GRANT <权限列表>
ON <对象类型> <对象名>
TO <用户或角色>
[WITH GRANT OPTION];
权限列表:SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES
对象类型:TABLE, VIEW, SCHEMA, DATABASE
WITH GRANT OPTION:允许被授权的用户将权限授予其他用户
REVOKE:撤销权限
REVOKE <权限列表>
ON <对象类型> <对象名>
FROM <用户或角色>
[CASCADE | RESTRICT];
CASCADE:撤销权限时同时撤销所有依赖的权限
RESTRICT:如果有依赖关系,则不撤销权限
ROLE:角色管理
CREATE ROLE <角色名>;
11
3 SQL 语言 3.4 权限
例题 3.1.
供应商表:𝑆(𝑆𝑁𝑂, 𝑆𝑁 𝐴𝑀 𝐸, 𝑆𝑇 𝐴𝑇𝑈𝑆, 𝐶 𝐼𝑇𝑌 )
零件表:𝑃(𝑃𝑁𝑂, 𝑃𝑁 𝐴𝑀 𝐸, 𝐶𝑂𝐿𝑂𝑅, 𝑊 𝐸𝐼𝐺𝐻𝑇 )
工程项目表:𝐽 (𝐽 𝑁𝑂, 𝐽 𝑁 𝐴𝑀 𝐸, 𝐶 𝐼𝑇𝑌)
供应情况表:𝑆𝑃𝐽 (𝑆𝑁𝑂, 𝑃𝑁𝑂, 𝐽𝑁𝑂, 𝑄𝑇𝑌)
1. 创建表
2. 查询
(a). 求供应工程 J1 零件的供应商号码 SNO
(b). 求供应工程 J1 零件为红色的供应商号码 SNO
(c). 找出没有使用天津产的零件的工程号码
(d). 查询生产了全部零件的供应商号码 SNO
(e). 求至少用了 S1 所供应的全部零件的工程号 JNO
3. 更新
(a). 把全部红色零件的颜色改成蓝色
(b). 从供应商关系中删除 S2 的记录,并从供应情况关系中删除相应的记录
1. (a). 创建供应商表 S
CREATE TABLE S (
SNO CHAR(2) PRIMARY KEY,
SNAME VARCHAR(10),
STATUS CHAR(2),
CITY VARCHAR(10) );
(b). 创建零件表 P
CREATE TABLE P (
PNO CHAR(2) PRIMARY KEY,
PNAME VARCHAR(10),
COLOR CHAR(2),
WEIGHT INT );
(c). 创建工程项目表 J
CREATE TABLE J (
JNO CHAR(2) PRIMARY KEY,
JNAME VARCHAR(10),
CITY VARCHAR(10)
);
(d). 创建供应情况表 SPJ
CREATE TABLE SPJ(
SNO CHAR(2),
PNO CHAR(2),
JNO CHAR(2),
QTY INT,
PRIMARY KEY (SNO, PNO, JNO),
FOREIGN KEY (SNO) REFERENCES S(SNO),
FOREIGN KEY (PNO) REFERENCES P(PNO),
FOREIGN KEY (JNO) REFERENCES J(JNO)
12
3 SQL 语言 3.4 权限
2. (a). 求供应工程 J1 零件的供应商号码 SNO
SELECT DISTINCT SNO
FROM SPJ
WHERE JNO = 'J1';
(b). 求供应工程 J1 零件为红色的供应商号码 SNO
SELECT DISTINCT SNO
FROM SPJ,P
WHERE SPJ.PNO=P.PNO AND JNO='J1'AND COLOR='';
SELECT DISTINCT SNO
FROM SPJ
WHERE JNO='J1' AND PNO IN
(SELECT PNO
FROM P
WHERE COLOR='') ;
(c). 找出没有使用天津产的零件的工程号码
SELECT DISTINCT JNO
FROM SPJ
WHERE JNO NOT IN (
SELECT JNO
FROM SPJ, S
WHERE SPJ.SNO = S.SNO AND S.CITY = '天津' )
SELECT DISTINCT JNO
FROM J
WHERE NOT EXISTS (
SELECT *
FROM SPJ, S
WHERE SPJ.SNO = S.SNO AND S.CITY = '天津' AND J.JNO = SPJ.JNO);
(d). 查询生产了全部零件的供应商号码 SNO
SELECT SNO
FROM S
WHERE NOT EXISTS (
SELECT *
FROM P
WHERE NOT EXISTS (
SELECT *
FROM SPJ
WHERE SPJ.SNO = S.SNO AND SPJ.PNO = P.PNO
)
);
13
3 SQL 语言 3.4 权限
(e). 求至少用了 S1 所供应的全部零件的工程号 JNO
SELECT DISTINCT JNO
FROM SPJ SPJZ
WHERE NOT EXISTS (
-- 找出S1供应的全部零件
SELECT *
FROM SPJ SPJX
WHERE SNO = 'S1'
-- 且这些零件中不存在该工程未使用的
AND NOT EXISTS (
SELECT *
FROM SPJ SPJY
WHERE SPJY.PNO = SPJX.PNO
AND SPJY.JNO = SPJZ.JNO
)
);
3. (a). 把全部红色零件的颜色改成蓝色
UPDATE P
SET COLOR=''
WHERE COLOR=''
(b). 从供应商关系中删除 S2 的记录,并从供应情况关系中删除相应的记录
DELETE FROM SPJ WHERE SNO=S2;(子表)
DELETE FROM S WHERE SNO='S2';
14
4 关系数据理论
4 关系数据理论
4.1 函数依赖
定义 4.1.1 (函数依赖)
R(U) 是一个属性集 U 上的关系模式,X Y U 的子集。若对于 R(U) 的任意一个可能的关系 rr
不可能存在两个元组在 X 上的属性值相等,而在 Y 上的属性值不等则称“X 函数确定 Y”或“Y 函数依
赖于 X,记作 X→Y
定义 4.1.2 (完全函数依赖)
在关系模式 𝑅(𝑈) 中,如果 𝑋 𝑌 并且对于 𝑋 的任何一个真子集 𝑋
都有 𝑋
𝑌 则称 𝑌 完全函数依
赖于 𝑋,记作 𝑋
𝐹
𝑌 。若 𝑋 𝑌 ,但 𝑌 不完全函数依赖于 𝑋,则称 𝑌 部分函数依赖于 𝑋,记作 𝑋
𝑃
𝑌
定义 4.1.3 (传递函数依赖)
在关系模式 𝑅(𝑈) 中,如果 𝑋 𝑌 𝑌 𝑋𝑌 𝑋𝑌 𝑍,则称传递函数依赖。记为:𝑋
𝑇
𝑍
4.2
定义 4.2.1 ()
𝐾 𝑅(𝑈) 的一个属性集,若 𝐾
𝐹
𝑈(完全依赖),则称 𝐾 𝑅(𝑈) 的候选码。
𝐾
𝑃
𝑈(部分依赖),则称 𝐾 𝑅(𝑈) 的超码。
定义 4.2.2 (外码)
在关系模式 𝑅(𝑈, 𝐹) 中,若 𝑋 𝑈,且 𝑋 𝑆(𝑈, 𝐹) 的一个候选码,则称 𝑋 𝑅(𝑈, 𝐹) 的外码。
4.3 范式
主属性:关系模式 𝑅(𝑈, 𝐹) 中,若 𝑋 𝑈,且 𝑋 𝑅(𝑈, 𝐹) 的一个候选码,则称 𝑋 为主属性。
15
4 关系数据理论 4.4 Armstrong 公理系统
非主属性:关系模式 𝑅(𝑈, 𝐹) 中,若 𝑌 𝑈,且 𝑌 不是 𝑅(𝑈, 𝐹) 的一个候选码,则称 𝑌 为非主属性。
定义 4.3.1 (1NF)
𝑈 中的每个属性都不可分。则关系模式 𝑅(𝑈, 𝐹) 满足第一范式(1NF
定义 4.3.2 (2NF)
𝑅(𝑈, 𝐹) 满足第一范式,且每个非主属性完全函数依赖于每一个候选码。 𝑅(𝑈, 𝐹) 满足第二范式2NF
定义 4.3.3 (3NF)
𝑅(𝑈, 𝐹) 满足第二式,且每个非主属性都不传递数依赖于任何候选码,则 𝑅(𝑈, 𝐹) 满足第三范式
3NF
定义 4.3.4 (BCNF)
𝑅(𝑈, 𝐹) 满足第三范式,且每一个决定因素都包含码,则 𝑅(𝑈, 𝐹) 满足 BCNF
定义 4.3.5 (4NF)
𝑅(𝑈, 𝐹) 满足 BCNF,且不存在非平凡的多值依赖,则 𝑅(𝑈, 𝐹) 满足第四范式(4NF
4.4 Armstrong 公理系统
推理规则
自反律:若 𝑌 𝑋 𝑈,则 𝑋 𝑌 𝐹 所蕴含
增广律:若 𝑋 𝑌 𝐹 所蕴含,且 𝑍 𝑈,则 𝑋 𝑍 𝑌 𝑍 𝐹 所蕴含
传递律:若 𝑋 𝑌 𝑌 𝑍 𝐹 所蕴含,则 𝑋 𝑍 𝐹 所蕴含
定义 4.4.1 (闭包)
在关系模式 𝑅𝑈, 𝐹 中,为 𝐹 所逻辑蕴涵的函数依赖的全体叫作 𝐹 的闭包,记为 𝐹
+
𝐹 为属性集 𝑈 上的一组函数依赖,𝑋 𝑈𝑋
+
𝐹
= { 𝐴 | 𝑋 𝐴能由 𝐹 根据 Armstrong 公理导出}𝑋
+
𝐹
为属性集 𝑋 关于函数依赖集 𝐹 的闭包。
定义 4.4.2 (候选码)
在关系模式 𝑅(𝑈, 𝐹) 中,若 𝑋 𝑈,且 𝑋
+
= 𝑈,则 𝑋 𝑅(𝑈, 𝐹) 的候选码。
𝑋
+
𝐹
的计算方法
1. 𝑋
(0)
= 𝑋𝑖 = 0
2. 𝐹 中的每一个函数依赖 𝑌 𝑍,若 𝑌 𝑋
(𝑖)
,令 𝑋
(𝑖+1)
= 𝑋
(𝑖)
𝑍
3. 𝑋
(𝑖+1)
𝑋
(𝑖)
,则用 𝑖 + 1 代替 𝑖,转
4. 𝑋
(
𝑖
+
1
)
= 𝑋
(
𝑖
)
,或 𝑋
(
𝑖
)
= 𝑈,则 𝑋
(
𝑖
)
即为 𝑋
+
𝐹
16
4 关系数据理论 4.5 模式分解
码的计算方法
若属性 𝐴 仅出现在所有函数依赖的右部,则它一定不包含在任何候选码中;
若属性 𝐵 仅出现在所有函数依赖的左部或不在任何函数依赖中出现,则它一定包含在某个候选码中;
若属性 𝐶 既出现在函数依赖的右部,又出现在左部,则它可能包含在候选码中;
在上述基础上求属性闭包,即先求 𝐵 关于 𝐹 的闭包,如 (𝐵)
+
𝐹
= 𝑈,则 𝐵 为候选码。
例题 4.1.
已知关系模式 𝑅𝑈, 𝐹其中 𝑈 = { 𝐴, 𝐵, 𝐶, 𝐷, 𝐸 }𝐹 = {𝐴𝐵 𝐶, 𝐵 𝐷, 𝐶 𝐸, 𝐸𝐶 𝐵, 𝐴𝐶 𝐵}。求
( 𝐴𝐵)
+
𝐹
1. 𝑋
(0)
= 𝐴𝐵
2. 计算 𝑋
(1)
= 𝐴𝐵 𝐶𝐷 = 𝐴𝐵𝐶𝐷 (依据 𝐴𝐵 𝐶, 𝐵 𝐷
3. 因为 𝑋
(0)
𝑋
(1)
,计算 𝑋
(2)
= 𝑋
(1)
𝐵𝐸 = 𝐴𝐵𝐶𝐷𝐸 (依据 𝐶 𝐸, 𝐴𝐶 𝐵
4. 这时 𝑋
(2)
𝑋
(1)
,但 𝑋
(2)
已等于全部属性集合 𝑈
5. 因此 ( 𝐴𝐵)
+
𝐹
= 𝐴𝐵𝐶𝐷 𝐸𝐴𝐵 𝑅𝑈, 𝐹 的候选码。
定义 4.4.3 (最小依赖集)
如果函数依赖集 𝐹 满足下列条件,则称 𝐹 为一个最小依赖集。
1. 𝐹 中任一函数依赖的右部仅含有一个属性。
2. 𝐹 中不存在这样的函数依赖 𝑋 𝐴,使得 𝐹 𝐹 {𝑋 𝐴} 等价。
3. 𝐹 中不存在这样的函数依赖 𝑋 𝐴𝑋 有真子集 𝑍 使得 𝐹 {𝑋 𝐴} {𝑍 𝐴} 𝐹 等价。
最小依赖集的求法
1. 𝐹 中的所有函数依赖的右边化为单一属性。
2. 去掉 𝐹 中的所有函数依赖左边的冗余属性。
3. 去掉 𝐹 中所有冗余的函数依赖。
4.5 模式分解
定义 4.5.1 (模式分解)
关系模式 𝑅(𝑈, 𝐹) 的一个分解是指
𝜌 = {𝑅
1
(𝑈
1
, 𝐹
1
), 𝑅
2
(𝑈
2
, 𝐹
2
), . . . , 𝑅
𝑛
(𝑈
𝑛
, 𝐹
𝑛
)}
其中
𝑈
=
𝑛
𝑖=1
𝑈
𝑖
,且没有
𝑈
𝑖
𝑈
𝑗
1
𝑖
𝑗
𝑛
𝐹
𝑖
𝐹
𝑈
𝑖
上的投影,即
𝐹
𝑖
= {𝑋 𝑌 | 𝑋 𝑌 𝐹
+
𝑋𝑌 𝑈
𝑖
}
定义 4.5.2 (保持依赖的分解)
给定关系模式 𝑅𝑈, 𝐹 的一个分解 𝜌 = {𝑅
1
𝑈
1
, 𝐹
1
, . . . , 𝑅
𝑛
𝑈
𝑛
, 𝐹
𝑛
} 𝐹 所逻辑蕴涵的函数依赖一定也
为分解后所有关系模式中的函数依赖 𝐹
𝑖
所逻辑蕴涵,即
𝐹
+
= (𝐹
1
𝐹
2
. . . 𝐹
𝑛
)
+
则称关系模式 𝑅 的这个分解是保持函数依赖的。
17
4 关系数据理论 4.5 模式分解
转换为 3NF 保持依赖的分解方法
1. 不在 𝐹 中的属性构成一个关系模式
2. 𝐹 中每一个 𝑋 𝐴 构成一个关系模式
𝐹 中有 𝑋 𝐴
1
𝑋 𝐴
2
𝑋 𝐴
𝑛
,用 𝑋 𝐴
1
𝐴
2
. . . 𝐴
𝑛
代替 𝑛 𝑋 𝐴
1
𝑋 𝐴
2
. . .𝑋 𝐴
𝑛
定义 4.5.3 (无损连接分解)
𝜌 = {𝑅
1
𝑈
1
, 𝐹
1
, . . . , 𝑅
𝑛
𝑈
𝑛
, 𝐹
𝑛
} 𝑅𝑈, 𝐹 的一个分解,若对 𝑅𝑈, 𝐹 的任何一个关系 𝑟 均有 𝑟 = 𝑟
𝜌 中各关系模式上投影的自然连,则称分解 𝜌 具有无损连接性。简称 𝜌 为无损分解。
无损分解的判定方法
1. 构造一个 𝑘 𝑛 列的表格
𝑖 行对应于模式 𝑅
𝑖
𝑘 个分解)
𝑗 列对应于属性 𝐴
𝑗
𝑛 个属性)
𝑅
𝑖
𝐴
1
𝐴
2
· · · 𝐴
𝑛
𝑅
1
𝑅
2
.
.
.
2. 填表规则:
𝐴
𝑗
𝑅
𝑖
,则第 𝑖 行第 𝑗 列填入 𝑎
𝑗
否则填入 𝑏
𝑖 𝑗
3. 修改表格:
逐一检查 𝐹 中的每个函数依赖 𝑋 𝑌
𝑋 列符号相同的行对应的 𝑌 列符号改为相同:
𝑌 列有 𝑎
𝑗
,则将 𝑏
𝑖 𝑗
改为 𝑎
𝑗
𝑌 列无 𝑎
𝑗
,则全改为 𝑏
𝑖 𝑗
(取最小行号 𝑖
4. 反复执行步骤 (3) 直到表格无法修改
5. 判断标准:
若某行变为全 𝑎𝑎
1
, 𝑎
2
, . . . , 𝑎
𝑛
,则为无损分解
否则为损失分解
定理 4.5.1
𝑅𝑈, 𝐹,有分解 𝜌 = {𝑅
1
𝑈
1
, 𝐹
1
, 𝑅
2
𝑈
2
, 𝐹
2
},则 𝜌 相对于 𝐹 是无损分解的充分必要条件是:
𝑈
1
𝑈
2
𝑈
1
𝑈
2
𝐹
+
𝑈
1
𝑈
2
𝑈
2
𝑈
1
𝐹
+
3NF 分解的无损连接且保持依赖分解算法
𝜌 = {𝑅
1
, 𝑅
2
, . . . , 𝑅
𝑘
} 是由结果为 3NF 的保持依赖分解算法得到的 3NF 分解,𝑋 𝑅 的一个候选码,
𝜏 = 𝜌 {𝑋 } 𝑅 的一个分解(注意没有 𝑈
𝑖
𝑈
𝑗
𝜏 中的所有关系模式均满足 3NF,同时,既具有连
接不失真性,又具有依赖保持性。
18
4 关系数据理论 4.5 模式分解
转换为 BCNF 的无损连接分解
1. 置初值 𝜌 = {𝑅}
2. 如果 𝜌 中所有关系模式都是 BCNF,则转
3. 如果 𝜌 中有一个关系模式 𝑆 不是 BCNF
𝑆 中的 𝑋 不含键且 𝐴 𝑋 𝑋 𝐴 构成 𝑆
1
= 𝑋 𝐴
𝑆
2
= 𝑈
𝑆
𝐴,用分解 {𝑆
1
, 𝑆
2
} 代替 𝑆,转
4. 分解结束,输出 𝜌
19
5 数据库设计
5 数据库设计
5.1 E-R 模型
5.1.1 基本组成
实体 [矩形]
属性 [椭圆]
联系 [菱形]
5.1.2 联系的类型
两个实体之间的联系
一对一联系(1:1
一对多联系(1:n
多对多联系(m:n
20
5 数据库设计 5.2 E-R 模型转换为关系模型
两个以上实体之间的联系
一对一联系(1:1:1
一对多联系(1:n:m
多对多联系(m:n:p
自联系
一对一自联系(1:1
一对多自联系(1:n
多对多自联系(m:n
5.2 E-R 模型转换为关系模型
1. 一个实体型转换为一个关系模式。
2. 一个一对一联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
3. 一个一对多联系可以转换为一个独立的关系模式,也可以与 n 端对应的关系模式合并。
4. 一个多对多联系转换为一个关系模式
5. 三个或三个以上实体间的一个多元联系转换为一个关系模式。
6. 具有相同码的关系模式可合并
7. 主码用下划线标识,外码用波浪线标识。
21
6 数据库恢复技术
6 数据库恢复技术
6.1 事务
BEGIN TRANSACTION :事务开始
COMMIT :事务提交,事务正常结束
ROLLBACK :事务回滚,撤销事务已完成的操作
事务的结束:COMMITROLLBACK
ACID 特性
原子性(Atomicity)事务中包括的诸操作要么都做,要么都不做。
一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性(Isolation)一个事务的执行不能被其他事务干扰。
持续性(Durability,永久性)一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
6.2 恢复
日志文件
各个事务的开始标记(BEGIN TRANSACTION
各个事务的结束标记(COMMIT ROLLBACK
各个事务的所有更新操作
日志登记原则
登记的次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库
22
6 数据库恢复技术 6.2 恢复
事务故障的恢复
1. 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
2. 对该事务的更新操作执行逆操作。即将日志记录中更新前的值 写入数据库。
插入操作, 更新前的值 为空,则相当于做删除操作
删除操作,则相当于做插入操作
若是修改操作,则相当于用修改前值代替修改后值
3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障的恢复
撤销故障发生时未完成的事务,重做已完成的事务。
1. 正向扫描日志文件(即从头扫描日志文件)
重做 (REDO) 队列:在故障发生前已经提交的事务
这些事务既有 BEGIN TRANSACTION 记录,也有 COMMIT 记录
撤销 (UNDO) 队列:故障发生时尚未完成的事务
这些事务只有 BEGIN TRANSACTION 记录,无相应的 COMMIT 记录
ROLLBACK 记录的事务也加入 UNDO 队列
2. 恢复处理
(a). 对撤销
(UNDO)
队列事务进行撤销
(UNDO)
处理
反向扫描日志文件,对每个撤销事务的更新操作执行逆操作
将日志记录中 更新前的值 写入数据库
(b). 对重做 (REDO) 队列事务进行重做 (REDO) 处理
正向扫描日志文件,对每个重做事务重新执行登记的操作
将日志记录中 更新后的值 写入数据库
具有检查点的恢复
1. 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后
一个检查点记录。
2. 由该检查点记录得到检查点建立时刻所有正在执行的事务清单 ACTIVE-LIST
建立两个事务队列:
UNDO-LIST:用于存放需要撤销的事务
REDO-LIST:用于存放需要重做的事务
ACTIVE-LIST 暂时放入 UNDO-LIST 队列,REDO-LIST 队列暂为空。
3. 从检查点开始正向扫描日志文件,直到日志文件结束。
如有新开始的事务 Ti,把 Ti 暂时放入 UNDO-LIST 队列。
如有提交的事务 Tj,把 Tj UNDO-LIST 队列移到 REDO-LIST 队列;直到日志文件结束。
如有回滚的事务 Tk,把 Tk REDO-LIST 队列移回 UNDO-LIST 队列。
4. UNDO-LIST 中的每个事务执行 UNDO 操作。 REDO-LIST 中的每个事务执行 REDO 操作,REDO
操作的起始点可以是 Tc 时刻。
23
6 数据库恢复技术 6.2 恢复
检查点前已结束 (COMMIT/ROLLBACK) 的事务不需要操作。
故障发生时尚未结束 (COMMIT/ROLLBACK) 的事务需要撤销。
故障发生前已提交 (COMMIT) 的事务需要重做。
故障发生前已回滚 (ROLLBACK) 的事务需要撤销。
24
6 数据库恢复技术 6.2 恢复
例题 6.1.
有下图所示日志记录:
1. 如果系统故障发生在 23 之后,说明系统恢复策略
2. 假设开始时 ABC 的值都是 0,如果系统故障发生在 23 之后,写出系统恢复后 ABC 的值。
序号 日志 序号 日志
1 T1:开始 13 检查点
2 T1:写 AA=10 14 T7:开始
3 T2:开始 15 T3:提交
4 T2:写 BB=9 16 T4:回滚
5 T3:开始 17 T5:写 BB=2
6 T1:提交 18 T8:开始
7 T2:回滚 19 T6:写 AA=8
8 T3:写 CC=11 20 T6:提交
9 T4:开始 21 T8:写 AA=12
10 T4:写 AA=5 22 T8:提交
11 T5:开始 23 T7:写 CC=22
12 T6:开始
1. T3T6T8 需要重做
T4T5T7 需要撤销
T1T2 不操作
2. 𝐴 : 0
2
10
19
8
21
12
𝐵 : 0
4
9
7
0
𝐶 : 0
8
11
25
7 并发控制
7 并发控制
7.1 概述
数据不一致问题
丢失修改(lost update
两个事务 T1 T2 读入同一数据并修改,T2 的提交结果破坏了 T1 提交的结果,导致 T1 的修改被
丢失。
脏读(dirty read
指事务 T1 修改某一数据,并将其写回磁盘,事务 T2 读取同一数据后,T1 由于某种原因被撤销,
T1 修改过的数据复原值,T2 的数据就与数库中的数据不致,T2 的数据就
“脏”数据,即不正确的数据。
不可重复读(non-repeatable read
不可重复读是指事务 T1 读取数据后,事务 T2 执行更新操作,使 T1 无法再现前一次读取结果。
幻读(phantom read
幻读也称作幻影phantom row现象,是指事务 T1 读取数据后,事务 T2 执行插入或删除操作,使
T1 无法再现前一次读取结果。
事务隔离级别
读未提交(Read Uncommitted
允许一个事务可以读取(但不能修改)另一个未提交事务正在修改的数据。可能出现脏读、不可重
复读和幻读的情形,但能解决丢失修改。
读已提交(Read Committed
只允许一个事务读其他事务已提交的数据。可以有效避免脏读,但不能保证可重复读和不幻读。
可重复读(Repeatable Read
一个事务开始读取数据后,其他事务就不能再对该数据执行 UPDATE 操作。可重复读杜绝了脏读和
不可重复读,但不能保证不幻读(其他事务可以执行 INSERT DELETE 操作)
可串行化(Serializable
最高的事务隔离级别,事务执行顺序是可串行化的,可以避免丢失修改、脏读、不可重复读和幻读。
26
7 并发控制 7.2 封锁
7.2 封锁
封锁
X 锁(排它锁)
排它锁又称为写锁,事务对数据对象加 X 锁后,其他事务不能对该数据对象加任何类型的锁,直到
该事务释放 X 锁。
S 锁(共享锁)
共享锁又称为读锁,事务对数据对象加 S 锁后,其他事务可以对该数据对象加 S 锁,但不能加 X 锁,
直到该事务释放 S 锁。
封锁协议
1. 一级封锁协议
事务在修改数据之前必须先对其加 X 锁,直到事务结束才释放。
一级封锁协议可防止丢失修改,并保证事务是可恢复的。
2. 二级封锁协议
在一级封锁协议的基础上,增加事务在读取数据之前必须先对其加 S 锁,读完后即可释放 S 锁。
二级封锁协议可以防止丢失修改(一级封锁协议解决)和读“脏”数据(用 S 锁控制)
3. 三级封锁协议
在一级封锁协议的基础上,增加事务在读取数据之前必须先对其加 S 锁,直到事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。
7.3 并发调度的可串行性
定义 7.3.1 (可串行化调度)
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称
种调度策略为可串行化调度(serializable schedule
定义 7.3.2 (冲突操作)
冲突操作时指不同的事务对同一数据的读写操作和写写操作。
𝑅
𝑖
(𝑋)𝑊
𝑗
(𝑋) (事务𝑇
𝑖
𝑋, 𝑇
𝑗
𝑋, 其中𝑖 𝑗)
𝑊
𝑖
(𝑋)𝑊
𝑗
(𝑋) (事务𝑇
𝑖
𝑋, 𝑇
𝑗
𝑋, 其中𝑖 𝑗)
定义 7.3.3 (冲突可串行化调度)
一个调度 Sc 在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度
Sc’,如果 Sc’ 是串行的,称调度 Sc 是冲突可串行化的调度。
27
7 并发控制 7.4 两段锁协议
例题 7.1.
今有三个事务的一个调度:
𝑟
3
(𝐵)𝑟
1
( 𝐴)𝑤
3
(𝐵)𝑟
2
(𝐵)𝑟
2
( 𝐴)𝑤
2
(𝐵)𝑟
1
(𝐵)𝑤
1
( 𝐴)
该调度是冲突可串行化的调度吗?为什么?
是冲突可串行化的调度
1. (a). 交换 𝑟
1
( 𝐴) 𝑤
3
(𝐵),得到:
𝑠
1
= 𝑟
3
(𝐵)𝑤
3
(𝐵)𝑟
1
( 𝐴)𝑟
2
(𝐵)𝑟
2
( 𝐴)𝑤
2
(𝐵)𝑟
1
(𝐵)𝑤
1
( 𝐴)
(b). 再交换 𝑟
1
( 𝐴) 𝑟
2
(𝐵)𝑟
2
( 𝐴)𝑤
2
(𝐵),得到:
𝑠
2
= 𝑟
3
(𝐵)𝑤
3
(𝐵)𝑟
2
(𝐵)𝑟
2
( 𝐴)𝑤
2
(𝐵)𝑟
1
( 𝐴)𝑟
1
(𝐵)𝑤
1
( 𝐴)
2. 𝑠
2
中,三个事务的执行顺序变为 𝑇
3
𝑇
2
𝑇
1
这是一个串行调度,因此原调度是冲突可串行化
调度。
7.4 两段锁协议
两段锁协议
所有事务必须分两个阶段对数据项加锁和解锁
1. 扩展阶段
在对任何数据进行读、写操作之前,事务可以申请和获得任意数量的封锁。
2. 收缩阶段
在释放一个封锁之后,事务不能再申请和获得任何其他封锁。
28