数据库原理2020-2021复习提纲

害,数据库原理杀我。考数据库之前必然是要先看看密码学的东西的,虽然是开卷(
不过数据库原理确实难,似乎也得整理一阵子了,战线估计要拉到23号或者22号了。

每章可能会多多少少放点例题,也可能不放,大概就是我找得到就放放

目录在手机端右下角点点横杠的一个图标那里,或者是电脑端左下角的箭头,其余功能自行探索

目录

  • 绪论
    • 数据库基本概念
    • 数据模型
    • 数据库系统结构
    • 数据库系统组成
  • 关系数据库
    • 关系与关系模式
    • 关系数据库
    • 关系操作
    • 关系完整性
    • 关系代数
  • SQL
    • SQL概述
    • 数据定义
    • 数据查询
    • 数据更新
    • SQL视图
  • 数据库安全性
    • 安全性概述
    • 安全控制
    • 视图机制
  • 数据库完整性
    • 实体完整性
    • 参照完整性
    • 定义完整性
    • 触发器
  • 关系数据理论
    • 范式
      • 1NF-BCNF
    • 数据依赖公理系统
      • 求闭包
  • 数据库设计
    • 数据库设计概论
    • 基本语句
      • 创建表的T-SQL语句
  • 数据库优化查询
    • 查询处理
    • 查询优化
  • 数据库恢复技术
    • 事务
    • 恢复概述
    • 恢复实现
  • 并发控制
    • 概述
      • 二阶段锁
      • 三重锁
      • 活锁与死锁
      • X锁与S锁
    • 并发调度的可串行性
    • 封锁粒度
  • 总结

绪论

数据库基本概念

  • 数据,数据库,数据库系统和数据库管理系统是四个基本概念。
  • 数据库是 1. 长期储存在计算机内 2.有组织的 3.可共享的 大量数据的集合
  • 数据库中的数据 1. 按照一定的数据模型组织 2.具有较小的冗余度 3.具有较高的数据独立性 4.具有易拓展性
  • 数据库系统是由 1.数据库 2.数据库管理系统 3.应用程序(及其开发工具) 4.数据库管理员 组成的维护数据的系统
  • 文件系统数据库系统 标志着数据管理技术的飞跃

数据模型

  • 数据模型是数据库系统的核心和基础
  • 两类:概念模型与物理模型
  • 三部分:数据结构,数据操作和数据完整性约束
  • 概念模型:
    • 概念模型
      ER方法

      ER:实体-联系方法,实体中的联系有一对一,一对多,多对多等类型

    • 物理模型(逻辑模型)
      层次,网状,关系,面向对象,对象关系,半结构化
      • 层次模型:倒立的数的结构,节点双亲唯一;不适用于多对多。适合一对多。
      • 网状模型:子女节点和双亲节点联系不一定唯一
      • 关系模型:一个关系就是一张表,列为属性,行为记录(元组);关系模型必须规范化,每一个分量不可分。

数据库系统结构

  • 型:值 (key:value)
  • 模式:是数据库全体数据 的描述。不涉及具体的值。模式的值叫做实例。
  • 模式相对稳定,实例相对变动。
  • 三级模式结构
    • 模式(逻辑模式)-> 全局描述
    • 外模式(子模式)-> 局部描述
    • 内模式(储存模式)-> 内部储存结构组织方式

      子模式 != 内模式,注意区分。

  • 二级映像
    • 外模式/模式:逻辑独立
    • 模式/内模式:物理独立

      模式(全局)相当于关系数据库中的表,外模式(子模式)(局部)相当于视图,内模式(储存模式相当于)能够恢复数据库的LDF和MDF文件。

数据库系统组成

  • 硬件平台
  • 软件
  • 人员

题目1:
关系模型的优点包括 ( )
A.严格建立在数学概念(关系理论)基础上的
B.概念单一
C.查询效率高
D.更高的数据独立性和安全性

  • 答案:
    题目2:

关系数据库

关系与关系模式

  • 域:用户定义完整性/其他规定的属性值的的一些取值范围
  • 笛卡尔积:数学上的笛卡尔积,完全叉乘。总数量为各基数相乘。
  • 关系的三种类型:基本表,查询表和视图表
  • 唯一标识:候选码
    • 候选码可以有多个
    • 候选码之一选出来为主码
    • 候选码的属性:主属性
  • 关系模式:R(U,D,DOM,F)
    • R:关系名
    • U:属性名集合
    • DOM:域集合
    • F:依赖关系集合

关系数据库

关系数据库分为型和值

  • 型:关系数据库模式
  • 值:关系模式某一时刻对应关系的集合

关系操作

分为查询,插入,删除,修改。

  • 查询
    • 可以分为选择、投影、连接、除、并、差、交、笛卡尔积等
    • 选择,投影,并,差,笛卡尔积是五种基本操作
    • 结构化查询语言SQL

关系完整性

  • 实体完整性:主属性不能取空值
  • 参照完整性:
    • R中有一个外码F,对应是另外一个关系E的属性
    • R叫参照关系,E叫被参照关系
  • 用户定义完整性:特殊的用户自定义的约束条件

关系代数

运算结果都是集合

  • 传统的集合运算:并差交笛卡尔
  • 专门的关系运算选择、投影、连接、除
    • 自然连接:满足条件的元组完全拼过去
    • 等值连接:在满足条件后删除重复列
    • 除运算:找出某一表中含有多项属性的子集

      这里不出意料的是要放题目的,暂时先写这么多

题目1:

  • 解析:元组数目等于笛卡尔积相乘的数目,为基数相乘的结果。如果是属性则为R和S基数相加的结果。

题目2:

题目3:

  • 解析:自然连接要求必须消除冗余属性列,所以必然比R和S属性之和要小(区别于等值连接)故不选A。

题目4:

  • 求解准则:先连接再投影,保证最小查询数,减少开销
  • 参考:

SQL

不整理语句,只整理SFW要点,以及一些特殊语句和派生表用法。
没有完全按照目录来写,目录的内容是看书时候最好能看一下的。

单表查询

  • 消除重复:SELECT DISTINCT * FROM

  • 模糊查询:LIKE以及NOT LIKE

  • 查询范围:_ _ _ WHERE age BETWEEN .. AND ..

  • 确定集合:IN(男,女)

  • 空值查询:IS (NOT) NULL

  • ORDER BY: S F W ORDER BY _ DESC,默认为升序,DESC为降序

    • 可以多属性排序,即在属性内部的记录排序
    • ORDER BY a,b DESC: a属性升序 ,a属性排完序在b属性内部降序
  • 聚集函数:

    • COUNT
    • SUM,MIN,MAX,AVG以及对应的AS函数
    • SELECT作为筛选的列,AS为别名
  • GROUP BY

    • 如果没有分组,聚集函数作用在整个查询结果
    • 分组后,聚集函数可以作用在所分的每组,并返回。
    • GROUP BY是对行分组,分组的筛选条件是GROUP BY a a属性下值相同的为一组
    • HAVING:在分组后的筛选

      HAVING 只能在GROUP BY子句后使用,以及聚集函数不能作为WHERE子句的条件表达式
      即,

      1
      2
      3
      4
      SELECT Sno,AVG(Grade) 
      FROM tab_score
      WHERE AVG(Grade > 90)
      GROUP BY Sno
      是一种错误的写法,正确写法为
    1
    2
    3
    4
    SELECT Sno,AVG(Grade) 
    FROM tab_score
    GROUP BY Sno
    HAVING AVG(Grade)>90

多表查询

  • 等值连接:满足表条件筛选,且需要引用表中有外键,同名需要指明表前缀
  • 外连接:左连接与右连接
    • 左连接:列出左边关系所有的元组
    • 右连接:列出右边关系左右的元组
  • 嵌套查询:一个SFW查询被称为一个查询块,在一个查询块中在WHERE子句或者HAVING子句嵌套另一个SFW块,这种查询叫做嵌套查询
    • IN
    • 相关子查询和不相关子查询
    • P105-P108
  • EXISTS/NOT EXISTS
1
2
3
SELECT Sname FROM tab_student s WHERE
EXISTS
(SELECT * FROM tab_score sc WHERE sc.sno = s.sno AND sc.sno = '1')
  • EXISTS引出的子查询一般选择列都为*,因为选择出的数据列明无意义,整个查询返回的只是true或false
  • P110-P111

基于派生表查询

  • 出现在WHERE后的查询可以称为子查询,出现在FROM后的查询生成派生表,成为主查询的查询对象
  • P113-P114

命令定义

  • 数据查询:SELECT
  • 数据操纵:UPDATE,INDERT,DELETE
  • 数据定义:CREATE,DROP
  • 数据控制:COMMIT,ROLLBACK,GRANT

视图

  • 命令:CREATE VIEW NAME AS SFW [WITH CHECK OPTION]
  • 视图是一个虚表,不储存视图对应的数据,只存放视图的定义
  • 视图作用
    • 简化用户的操作[即只需要查询虚表,而无需再次多表查询等繁琐步骤]
    • 可以令用户多种角度看待统一数据
    • 对重构数据库提供了一定程度的逻辑独立
    • 对机密数据提供安全保护
    • 利用视图可以更加清晰的表达查询
    • P128-P129

题目

  • 题目1:查询tab_score表中成绩最高的学号、课程号和成绩,正确的SELECT语句是
    1
    SELECT TOP 1 WITH TIES sno,cno,score FROM tab_score ORDER BY score DESC
  • 题目2:查询tab_student表姓“张”的学生记录,正确的SELECT语句是
    1
    SELECT * FROM tab_student WHERE sname LIKE 张%'
    注意:% 表示任意长度字符串,_ 表示固定位数占位
  • 题目3:查询选修C001课程的学生学号和成绩,查询结构按成绩从高到低(降序)排序,成绩相同的按学号从小到大(升序)排序。正确的SELECT语句是
    1
    SELECT sno, score FROM tab_score WHERE cno='C001' ORDER BY score DESC, sno
  • 题目4:查询tab_score表中需要参加补考(含缺考,成绩为NULL)学生的记录。正确的SELECT语句是
    1
    SELECT * FROM tab_score WHERE score<60 OR score IS NULL
  • 题目5:查询选修“数据结构”且成绩90分以上(含)学生的学号、姓名、成绩。正确的SELECT语句是
    1
    SELECT a.sno, sname, score FROM tab_student a, tab_course b, tab_score cWHERE a.sno=c.sno AND b.cno=c.cno AND cname='*' AND score>=90
  • 题目6:查询选修教师“张铭”授课的学生学号、姓名、成绩。正确的SELECT语句是
    1
    SELECT a.sno, sname, score FROM tab_student a JOIN tab_score b ON a.sno=b.snoJOIN tab_teacher c ON b.tno=c.tno AND tname='张铭'
  • 题目7:查询所有比“李四”年龄大的学生学号、姓名和出生日期,正确的SELECT语句是
    1
    SELECT sno,sname,birthday FROM tab_student WHERE birthday<(SELECT birthday FROM tab_student WHERE sname='")
  • 题目8:查询没有选修“数据结构”课程的学生学号和姓名。正确的SELECT语句是
    1
    SELECT sno,sname FROM tab_student WHERE NOT EXISTS (SELECT * FROM tab_score WHERE tab student.sno=tab_score.sno AND cno (SELECT cno FROM tab_course WHERE cname='*'))
  • 题目9:若要统计所有课程平均成绩80以上(含)学生的学号、姓名、平均成绩,并按成绩从高到低排序。正确的SELECT语句是
    1
    SELECT a.sno,sname,AVG(score) AS avg_score FROM tab_student a,tab_score bWHERE a.sno=b.sno GROUP BY a.sno,sname HAVING AVG(score) >=80 ORDER BY avg_score DESC

数据库安全性

安全性概述

  • 数据库的安全性是指保护数据库防止不合法使用造成的数据泄露,更改破坏
  • 数据库不安全因素:
    • 非合法用户登录(指非本系统内人员访问到数据库)
    • 合法用户越权访问
    • 数据库重要敏感数据泄露
    • 安全环境的脆弱性
  • 安全标准:D-C1-C2-B1-B2-A1 安全性递增
    区分:

    安全控制

  • 用户鉴别:针对非合法用户的访问进行控制
    • 静态口令
    • 动态口令
    • 生物特征
    • 智能卡
  • 存取控制:针对合法用户或者非合法用户的越权访问

    主要采用存取控制机制:定义用户权限和合法权限检查。定义用户权限是将用户加入到可访问用户中去,合法权限是判断可访问用户的权限等级。C2级别的数据库管理系统支持自主存取控制强制存取控制

  • 自主存取控制:
    • 用户对不同数据库权限不同
    • 不同用户对同一对象权限有所不同
    • 权限可以转授权
  • 强制存取控制:
    • 每个数据库对象标有密级
    • 用户被授予一定权限的许可证
    • 对于任意一个对象,只有具有许可证的用户才可以访问
    • 权限不可转授权

      存取控制的对象不仅有数据本身,还可以是数据库模式。 P140-P141。 常用命令为GRANTREVOKE.

视图机制

  • 为不同用户定义不同的视图,把数据对象限制在一定的范围内。
  • 通过视图把要保密的数据对无权限用户隐藏起来。

数据库完整性

指数据的正确性和相容性
这部分大多是在SQL下介绍三种完整性

实体完整性

1
2
3
4
5
6
7
CREATE TABLE tab_student(
Sno CHAR(9) PRIMARY KEY, # <-> 主码,列级定义
Sname VARCHAR(20) NOT NULL,
..
..
# 多属性只能表级定义:PRIMARY KEY (Sno,Sname)
);
  • 主码规范实体完整性,判断:
    • 主键唯一性
    • 主键是否为空

参照完整性

1
2
3
4
5
6
7
8
9
CREATE TABLE tab_score(
Sno CHAR(9) NOT NULL
Tno CHAR(9NOT NULL,
..
..
PRIMARY KEY (Sno,Tno),
FOREIGN KEY (Sno) REFERANCES tab_student(Sno), # <-> 外键,表级定义
..
);
  • 外键规范参照完整性定义,起约束遵循外键所在表中的约束,同时对冲突情况进行反馈:
    • 拒绝:不允许冲突发生,为默认策略
    • 级联
    • 设置为NULL

定义完整性

1
2
3
4
5
6
CREATE TABLE tab_student(
Sno CHAR(9) NOT NULL
Ssex CHAR2CHECK (Ssex IN ('男''女')), #<-> 用户定义约束
# CONSTRAINT C1 CHECK(Ssex IN ('男','女')), #<-> 完整性约束命名子句
..
);
  • 定义完整性基于用户定义完整性实现对属性的自主约束,可以应表级约束或者完整性约束明明子句来实现定义约束和命名等操作。
  • P165

触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊过程,又叫做事件-条件-动作规则

  • 触发器在同一张表最多设置3个,分别为对应事件INSERT、DELETE、UPDATE。

    不考虑组合,与书中讲述有所出入。

  • P169

关系数据理论

范式

  • R(U,D,Dom,F)

R 关系名 U 关系的属性集合 D是属性集的数据域 Dom为域映射 F是数据依赖集

U里面有成绩 D则是整数 Dom是1-100

  • R(U,F)一般省略了中间的两个D F数据依赖值得是同一关系中属性间的相互依赖和相互制约
  • 数据依赖分为
    • 函数依赖 123范式
    • 多值依赖 4范式
    • 连接依赖 5范式
  • 注意和外键/外部键完全不同
  • 函数依赖

(对于某些关系)主键确定,则主键对应的一些值也确定,学生表中学生学号确定,则对应学生的基本属性也确定。一般讨论的是非平凡的函数依赖 (X->Y,Y不属于X)

  • 完全函数依赖和部分函数依赖

  • R(U,F)

设K为上述关系的属性/属性组,,若K-F->U,则K是R的候选码,候选码可作为R的主码,若候选码多个则选定其中一个为主码

第一范式 1NF

属性不可分割

第二范式 2NF

非主属性完全依赖主码,所有的非完全依赖的属性在关系中应该被消除

第三范式 3NF

非主属性不存在传递依赖于码(取消传递依赖),满足第三范式需要满足第二范式,故满足第三范式的关系中非主属性的必完全依赖于码

BC范式 BCNF

  • 每一个决定因素X都包含码,则R满足BCNF(X->Y,非平凡函数依赖)

3NF和BCNF区别:

3NF着重于消除传递依赖,BCNF强调与X必须是主码(候选码)且为决定因素

满足BCNF:

    • 非主属性对每个码都是完全函数依赖(3NF)
    • 主属性对于不包含他的码,也是完全依赖(学号(PK),身份证号(CK),)
    • 非码(非主属性)之间没有函数依赖
  • 满足3NF不一定满足BCNF

第四范式 4NF

多值依赖(R(U),XYZ是U的子集对于X的一个确定值,都存在Y的一组值与之对应,但Y的这组值和Z的属性值不相关)

Z不为空:非平凡的多值依赖

Z为空:平凡的多值依赖(满足4NF)

  • 对于R的每个非平凡多值依赖X->->Y,X必含有码,则满足4NF
  • 4NF:属性之间不允许非平凡且非函数依赖的多值依赖

1NF->2NF :消除非主属性对码的部分函数依赖

2NF->3NF :消除非主属性对码的传递函数依赖

3NF->BCNF:消除主属性对码的部分和传递函数依赖

BCNF->4NF:消除非平凡且非函数依赖的多值依赖

数据依赖公理系统

  • 函数依赖集闭包F+ 和 属性集闭包XF+

  • 函数依赖集等价:闭包相同

  • 最小函数依赖集

不出意料的这里也是会放一部分题出来的:)

题目1: 删除异常:不该删除的数据被删除
题目2: 插入异常:应该插入未插入
题目3:

  • 判断关系模式最高达到第几范式:
    • 求出候选键
    • 每个 FD 的左部都是超键(包含主属性的属性集合)——BCNF
    • 每一个属性都不依赖于其它非主属性——3NF
    • 每一个非主属性都完全依赖于 R 的候选键——2NF
    • 否则是 1NF
  • 求候选键:
    • 只出现在函数依赖(FD)左边的,或者没出现在 FD 中的属性一定是主属性。(组成候选键的属性都叫主属性)
    • 只出现在函数依赖右边的属性一定是非主属性。(不是主属性即为非主属性)
    • 如果一个只出现在函数依赖左边的属性它的闭包包含了所有的属性,则它是唯一候选键
    • 或者根据闭包求,若某个属性集闭包可以推导出所有属性,则该属性集为候选码
  • 对于本题:HS只出现在左侧, 右侧没有单独出现,所以HS为候选码(主属性)
    • 判断BCNF:C->T 不满足左侧为超键,不满足BCNF
    • 判断3NF:所有属性都依赖主属性 C->T 以及 H,R->C 均依赖非主属性
    • 判断2NF:非主属性是否完全依赖候选键:
      • 先找非主属性:CTR
      如果一个属性Y既依赖于X,也依赖于X的某个子集,则说明Y部分依赖于X
      • 判断:CTR没有依赖H或者S,所以满足2NF
    • 如果不满足2NF,则为1NF,结合上述条件,此题选择B

题目4:
题目5:
R1(ABC), F={AB→C}
候选键:AB,FD 的左部都是超键(包含 AB),故为 BCNF。
R2(ABC), F={A→B,A→C}
候选键:A,FD 的左部都是超键,故为 BCNF。
R3(ABC), F={AC→B,B→C}
候选键:AC,左部不都是超键,不是 BCNF;C 依赖于非主属性 B,不是 3NF;每个非主属性完全依赖于 AC,故为 2NF。
R4(ABCD), F={AB→C,B→D}
候选键:AB,可知不是 BCNF;每一个属性都不依赖于非主属性,故为 3NF。
R5(ABC), F={A→BC,B→A,B→C}
候选键:A、B;左部都是超键(包含 A、B),故为 BCNF。
R6(ABC), F={A→B,B→C,C→A}
候选键:A、B、C;左部都是超键(包含 A、B、C),故为 BCNF。

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键
必须唯一标识才可以作为超键,并不是说超键的子集可以作为超键。对于上述R4,AB为候选码,作为超键不可以划分子集,所以B->D中B不是超键,不属于BCNF,但是B属于超键里面的主属性,所以D依赖主属性,且所有属性均不依赖非主属性,满足3NF


数据库设计

数据库设计概论

  • 数据库设计需求

  • 三分技术,七分管理,十二分基础数据

  • 设计的基本步骤

    • 需求分析

    • 概念结构设计

    • 逻辑结构设计

      • 数据库逻辑结构设计与数据库三级模式相对应的是
        A.逻辑模式
        B.子模式
        C.内模式
        D.逻辑模式和子模式

        • 正确答案:D ↑
      • 下列哪个不属于数据库的实施与维护的任务
        A.数据载入
        B.应用程序设计
        C.应用程序调试
        D.数据备份与恢复

        • 正确答案:B ↑
    • 物理结构设计

    • 数据库实施

    • 数据库运行和维护

  • ER图的合并

一个实体转化为一个关系,实体的属性就是关系的属性

  • 冲突问题
    • 属性冲突
    • 命名冲突
    • 结构冲突
  • 冗余问题
    • 消除不必要的冗余
    • 几点合并要点:
      • 1:1可以转化为一个独立的关系模式,也可以和两端的任意一端关系模式合并
      • 1:n可以转化为一个独立的关系模式,也可以1端向多端进行合并,不能合并到1端,且关系的码为多端实体的码
      • m:n只能转化为一个独立的关系模式,不可以两个实体之间合并,且独立的关系模式中的主码为两个关系主码的组合码
      • 物理结构与索引
      • P236-P237

基本语句

创建数据库的T-SQL语句

T-SQL使用MDF和LDF(数据文件和日志文件)创建数据库,如果对应目录下有文件则恢复,如果没有则创建

1
2
3
4
5
6
7
8
9
CREATE DATABASE 数据库名 --创建数据库
ON PRIMARY
(
<数据文件参数>[,…n][文件组参数]
)
LOG ON
(
<日志文件参数>[,…n]
)

表的T-SQL语句

1
2
3
4
5
6
7
CREATE TABLE table_name( 
column1 datatype, --列级约束
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns ));--表级约束

其中,datatype为选定列属性的数据类型,一般为CHARVARCHAR
同时,对删除表的操作为:

1
DROP TABLE table_name;

如果需要,对表内记录的增删改查为:

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   
VALUES (value1, value2, value3,...valueN); -- 增加

DELETE FROM table_name
WHERE [condition]; -- 删除

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition]; -- 更改

SELECT column1, column2, columnN FROM table_name; -- 查找

控制操作的T-SQL语句

控制操作基于事务,事务的章节在下几部分,此处仅做语句介绍。

1
2
3
4
5
6
7
8
9
Begin Tran 
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT -- COMMIT 提交事务

Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK -- ROLLBACK 回滚事务

其他T-SQL语句

T-SQL 教程

  • 按理说这部分的题应该仅限于最后一题
  • 如果别的地方出了当我没说

数据库优化查询

查询处理

  • 查询处理分为 查询分析 ,查询检查 ,查询优化 和 查询执行 四个阶段。
  • 查询处理方式不同,对数据的总读写数也不同,运行时间也不同。

查询优化

  • 优化目的在于用户不用费心考虑查询表达,系统优化的可以比用户更好
  • 代数优化:查询树的启发式优化:
    • 选择运算尽量先做
    • 投影运算和选择运算同时进行
    • 把投影运算和前后的双目运算结合起来
    • 某些选择和前面要执行的笛卡尔积结合起来做连接运算
    • 找出公共子表达式

      这里会放代数运算的一部分小题


数据库恢复技术

事务

事务是用户定义的数据库操作序列,要么全做,要么全都不做。
事务通常以BEGIN TRANSACTION开始,以COMMIT或者ROLLBACK结束。前者表示提交,表示把数据库更新写到磁盘的物理数据库,后者表示回滚,将该事务做的一切事情撤销,数据库回到事务未开始的状态。

事务执行的结果是从一个一致性状态变到另一个一致性状态

  • ACID特性:
    • Atomicity 原子性:事务中的各个操作要么全做,要么全不做
    • Consistency 一致性:数据不会因为事务的中断或者其他操作导致数据的不一致性
    • Isolation 隔离性: 一个事务的执行不受其他事务的干扰,并发执行的事务互相不干扰。
    • Durability 持续性:事务完成后对数据的结果影响是永久的。

恢复概述

  • P294-P296
  • 好像是没啥可说的

恢复实现

  • 数据转储
  • 日志文件

并发控制

事务可以串行执行,也可以并发执行。事务是并发处理的基本单位
为了保证事务的 一致性隔离性 ,数据库进行了 并发控制 的机制。注意,锁机制是并发控制的主要技术之一。

概述

  • 并发控制不当带来的问题:
    • 丢失修改
    • 不可重复读
    • 读脏数据

      不一致性原因:破坏了事务的隔离性。解决方式:锁机制

封锁是实现并发控制的一个非常重要的技术

S锁与X锁,三级锁协议

基本的封锁类型分为排它锁和共享锁。(X锁与S锁)

  • 封锁协议
    • 一级封锁协议:写数据加X锁
      • 缺点:没有读数据的锁,不能保证可重复读可不读脏数据
    • 二级封锁协议:读数据加S锁,然后写数据时候加X锁。读完数据就可以释放S锁
      • 缺点:不能保证可重复读
    • 三级封锁协议:读数据之前加S锁,事务结束之后才释放S锁

      注意,X锁始终是事务结束之后才释放,所以三种锁协议都会X锁在事务结束之后释放。区别在于S锁释放的时机,如果有S锁,则锁协议为二级或三级;如果S锁在读完释放则为二级锁协议,在事务结束之后释放为三级锁协议。
      三种锁协议均满足不丢失修改(X锁的存在),一级锁不可以解决脏数据可重复性问题(无S锁),二级锁协议不能解决重复读的问题(S锁释放过早),三级锁协议均可以满足。

活锁与死锁

活锁:有些事务可能一直等待锁释放

  • 解决:先来先服务

死锁:请求锁释放的双方互相等待。

  • 诊断:
    • 预防死锁的发生,定期检查
    • 超时判断,根据某事务的等待时间判断是否发生死锁
    • 等待图:在资源申请图(有向图)中,发生回路即可判断有死锁
    • 解决方式:选择代价最小的事务撤销。使其他事务得以继续运行

并发调度的可串行性

  • 可串行化调度:多个事务的并发执行是正确的<=>与事务串行调度的结果相同

可串行性是并发事务正确调度的准则

  • 冲突可串行化调度
    冲突操作:不同事务对同一数据的读写写写操作
    不可交换操作: 不同事务的冲突操作以及同一事务的两个操作

    • 这就意味着,同一事务的两个操作虽然不可交换,但是不满足冲突条件,所以同一事务的两个操作不冲突
  • 通过交换 两个事务不冲突操作 ,使得一个并发的调度串可以转换为另一个串行的调度,则该并发调度可以称为冲突可串行化的调度若一个调度是冲突可串行化的调度,则这个调度一定是可串行化的调度 。可以用这个方法判断一个冲突是否冲突可串行化。

  • P318

  • 注意:不可以冲突可串行化的调度 不一定 是不可串行调度,取决于该并发调度的结果是否和串行调度的结果相同。相同即可认为是可串行化调度。即冲突可串行化调度是可串行化调度的充分条件,冲突可串行化(小范围) => 可串行化调度(大范围)。

  • P319

两段锁协议

  • 在对任何数据进行读写操作前,要先申请锁

  • 释放锁之后,不再申请或者获得其他锁。
    两段锁意味着,事务分为获得锁阶段(扩展阶段)和释放锁阶段(收缩阶段)

  • 同样需要说明的是,事务遵循二阶段锁协议同样是可串行化调度的 充分条件,即遵循两阶段锁协议的事务必然是可串行化调度,但是可串行化调度未必都遵循两阶段锁协议。

封锁粒度

封锁对象的大小称为封锁粒度。封锁粒度和系统的并发度与并发控制的开销密切相关。

  • 多粒度封锁:首先定义多粒度树,多粒度封锁协议允许多粒度树种的每个结点独立加锁。对某一个结点加锁意味着后裔结点会被加上同样类型的锁。根据锁是被直接加上或者继承而来,多粒度封锁中每个数据对象可能有显式封锁隐式封锁

    • 显式封锁:直接加到数据对象的锁
    • 隐式封锁:由父节点或者其他节点继承而来的锁
  • 意向锁:

    • 引出原因:加锁前需要判断该锁是否与其他锁冲突,由于加锁是到行级的操作,因此需要判断上级下级与该锁的显示或隐式冲突,为了减少开销判断,在上锁之前先给表级上锁,等下一个请求加锁只需要判断表级锁相容性就可以了。
    • 意向锁要求:对任意一个结点加意向锁,则该节点的下层结点正在被加锁,等到对结点加锁时,要首先对上层结点加意向锁(用来标识锁)
    • P321-322

题目1:
题目2:

题目3:

  • 对于三种不一致性问题来说,如果多个事务设计多个读,则会产生不可重复读的问题,如果多个事务同时涉及对同一对象的读写,则会产生丢失修改的问题,如果多个事务单个读写另外一个读,则会产生读脏数据的问题

题目4:

  • 冲突:不同事务对同一对象的读写或者写写
  • write2(A)与read1(A)产生冲突
    • 所以调度有并发问题,不可串行化,存在冲突,选择C

题目5:

  • 两阶段锁协议分为上锁和解锁两个阶段,D错误

总结放在看完题之后写。