读书笔记——数据库系统概论

第一章 绪论

1.1 数据库系统概述

一、四个基本概念

数据:描述事物的符号记录;
数据库:长期存储在计算机内、有组织、可共享的大量数据的集合;
数据库管理系统DBMS:位于用户和操作系统之间的一层数据管理软件;
数据库系统:由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统;

数据库管理系统的功能:
1、数据定义;
2、数据的组织、存储和管理;
3、数组操纵功能;
4、数据库的事务管理和运行管理;
5、数据库的建立和维护功能;
6、数据库通信等其他功能;

数据管理阶段 面向对象 共享性 冗余度 数据独立性 结构
人工管理阶段 面向某一程序 极大 无结构
文件系统阶段 面向某一应用 记录内有结构、整体无结构
数据库系统阶段 面向现实世界 整体结构化

1.2 数据模型

数据模型:对现实世界数据特征的抽象;

数据模型分两类:
1、概念模型:按用户的观点对数据和信息建模,主要用于数据库设计;
2.1、逻辑模型:按系统观点对数据建模,主要用于DBMS的实现;
2.2、物理模型:对数据最底层的抽象,描述数据在系统的内部表示和存取方法;

现实世界 -> 信息世界 -> 机器世界;

信息世界中的基本概念:

实体:客观存在并相互区分的事物;
属性:实体所具有的某一特性;
码:唯一标识实体的属性集;
实体型:用实体名及属性名集合来抽象和刻画同类实体;
实体集:同一类型实体的集合;
联系:实体内部的联系即为属性;实体之间的联系有 1:1、m:1、m:n;

数据模型的组成要素:
1、数据结构:描述数据库的组成对象以及对象之间的联系,是对系统静态特性的描述;
2、数据操作:对数据库中各对象的实例(值)所允许的操作的集合;
3、数据的完整性约束条件:一组完整性规则(数据及其之间的联系所满足的约束);

常用的数据模型:

数据模型 描述 优点 缺点
层次模型 树状结构,有且只有根节点没有双亲结点,其他节点有且只有一个双亲结点 简单清晰,查询效率高,提供良好的完整性支持 现实中很多联系是非层次型的,查询子女节点必须通过双亲结点
网状模型 图状结构,允许一个以上节点无双亲或者有多个双亲 能更加直接地描述现实世界、存取效率高 结构复杂,且必须选择合适的存取路径,加重程序员编写负担
关系模型 每个关系的数据结构都是一张二维表、关系模型要求关系必须是规范化的 集合操作、建立在严格的数学概念上、数据结构简单清晰、存取路径对用户透明 由于存取路径的透明导致查询效率不高,往往需要对查询请求优化,增加开发难度

关系模型的数据结构:

1、关系:一个关系对应一张二维表;
2、元组:表的一行即为一个元组;
3、属性:表中的一列即为一个属性;
4、码:表中的某个属性(组),它可以唯一确定一个元组;
5、域:一组具有相同数据类型的值的集合;其中不同值的个数称为这个域的基数;
6、分量:元组中的一个属性值;
7、关系模式:对关系的描述;

1.3 数据库系统的结构

Q:数据模型中“型”与“值”的区别?
A:“型”是指对某一类数据的结构和属性的说明;”值“是“型”的具体赋值;模式是数据库中全体数据的逻辑结构和特征的描述;模式的一个具体值称为模式的一个实例;模式是相对稳定的,而实例是相对变动的;

型 = 模式 = 描述; 值 = 实例 ;

三级模式:

模式:数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图;一个数据库只有一个模式;
外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示;一个数据库有多个外模式;
内模式:是数据物理结构和存储方式的描述,是数据在数据库内部的组织形式;一个数据库只有一个内模式;

两层映像:

外模式/模式映像:模式改变时,只需要此映像对应做出改变,而外模式可以保持不变,应用程序根据外模式编写的,从而应用程序不用修改;保证了数据与程序的逻辑独立性;
模式/内模式映像:数据库存储结构改变时,DBA对此映像做出相应改变,从而使模式保持不变,从而应用程序也不必修改;保证了数据与程序的物理独立性;

两层映像保证了数据库系统中数据的逻辑独立性和物理独立性;

1.4 数据库系统的组成

1、硬件及平台:大的内存、大的磁盘、较高的数据传输率;
2、软件:数据库管理系统、支持DBMS运行的OS、数据库应用系统等;
3、人员:DBA(数据库管理员)、系统分析员、数据库设计人员、应用程序员、用户;

第二章 关系数据库

2.1 关系数据结构及形式化定义

笛卡尔积:给定一组域D1,D2,…Dn,允许其中某些域相同,则D1,D2…Dn的笛卡尔积为D1XD2X…XDn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
其中每一个元素(d1,d2,…,dn)为一个n元组,简称元组,元组的每一个值di称为分量;

关系:D1XD2X…Dn的子集称为在域D1,D2,…Dn上的关系,表示为R(D1,D2,…,Dn);n表示关系的目或度;

候选码:若关系中的某一属性组能唯一地标识一个元组,而其子集不能,则称该属性组为候选码;
主码:若一个关系有多个候选码,选定一个为主码;
主属性:各个候选码所包含的属性的集合;
全码:所有属性是这个关系模式的候选码;

基本关系的六条性质
1、列是同质的:每一列中的分量来自于同一个域;
2、不同的列可出自同一个域;
3、列的顺序无所谓;
4、任意两个元组的候选码不能取相同的值;
5、行的顺序无所谓;
6、每一个分量都必须是不可分的数据项;

关系模式
关系模式:R(U,D,DOM,F)
U——属性名集合;
D——属性所来自的域;
DOM——属性和域的映射关系;
F——属性间数据的依赖关系集合;

关系模型的存储结构
有的RDBMS将物理数据的组织交给OS完成;而有的则向OS申请若干文件,自己划分空间等进行存储管理;

2.2 关系操作

基本关系操作:选择、投影、笛卡尔积、并、差;
集合操作方式指一次一集合;而非关系数据模型的数据操作方式则为一次一记录;

关系数据语言的分类:
1、关系代数语言;
2、关系演算语言:分元组关系演算和域关系演算两种;
3、具有1、2特点的SQL语言;

2.3 关系的完整性

关系的两个不变性:实体完整性、参照完整性;

三种完整性约束 描述
实体完整性 主属性不能取空值,因为现实生活中实体是可区分的,所以关系模型中以主码作为唯一性标识 ;
参照完整性 F不是关系R的码,但与关系S的主码相对应,则关系R参照关系S,若F为R中的主属性,则不能取空值;
用户自定义完整性 是针对某一具体关系数据库的约束条件,反应某一具体应用所涉及的数据必须满足的语义要求

Q:等值连接与自然连接的区别?
A:等值连接包括自然连接,后者要求连接的两个关系中进行比较的分量必须是同名的属性组。并在结果中把重复的属性列去掉;

第三章 关系数据库标准语言SQL

3.1 SQL

SQL语言的特点:

1、综合统一:集数据定义语言、数据操纵语言、数据控制语言于一体,风格统一,可独立完成全部活动;
2、高度非过程化:存取路径对用户透明,用户只需提出“做什么”,不用担心“怎么做”;
3、面向集合的操作方式:操作对象、查询结果、一次增删改查的对象都可以是集合;
4、以同一种方法提供多种使用方式:嵌入式和内含式语法几乎一致;
5、语言简洁、易学易用;

基本表:基本表是本身独立存在的表,一个关系对应一个基本表;

3.2 视图

视图:视图是从一个或几个基本表(或视图)导出的表,是一个虚表,数据库中只存放视图的定义,而不存放视图对应的数据;

行列子集视图:从单个基本表导出的,并且只是取掉了基本表的某些行和某些列,但保留了主码的一类视图;

一般来说,行列子集视图是可更新的,其他大多不可更新;

视图的作用:
1、简化用户操作;
2、使用户能以多种角度看待同一数据;
3、对重构数据库提供了一定程度的逻辑独立性;
4、能够对机密数据提供安全保护;
5、适当利用视图可以清晰地表达查询;

第四章 数据库安全性

4.1 数据库安全性概述

数据库的安全性:保护数据库以防止不合法使用所造成的数据泄露、更改或破坏;

4.2 数据库安全性控制

一、用户身份鉴别
系统提供一定的方式让用户表示自己的名字或身份,每次用户要求进系统时,系统核对,通过鉴定后才提供使用权限;

二、存取控制
1、自主存取控制:用户对不同的数据库对象有不同的存取权限,不同用户对同一对象也有不同权限,且用户可将其拥有的权限转授给其他用户;

角色:被命名的一组与数据库操作相关的权限,角色是权限的集合;

2、强制存取控制:每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证;对于任意一个对象,只有具有合法许可证的用户才可以存取;

主体:系统中的活动实体,包括数据库用户和代表用户的进程;
客体:系统中的被动实体,受主体操纵,包括文件、基本表、视图、索引等;

敏感度标记分为:绝密、机密、可信、公开;

许可证级别:主体的敏感度标记;
密级:客体的敏感度标记;

存取权限规则:
1、仅当主体的许可证级别大于or等于客体的密级时,该主体才能读取相应客体;
2、仅当主体的许可证级别小于or等于客体的密级时,该主体才能写相应客体;

4.3 视图机制

为不同的用户定义不同的视图,把数据对象限制在一定的范围内;即通过视图把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护;

4.4 审计

Q:为什么要提供审计功能?
A:因为任何系统的安全保护措施都不是完美的,总有人蓄意盗窃、破坏数据,而审计功能把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等;

4.5 其他安全性保护

数据加密:
1、存储加密;
2、传输加密;

推理控制:根据能访问到的信息推知更高密级的数据;

第五章 数据库完整性

数据库完整性指数的正确性、相容性、有效性;

Q:数据库完整性和安全性的区别?
A:数据的完整性是为了防止数据库中存在不合语义的数据,即防止数据库中存在不正确的数据;数据的安全性是保护数据防止恶意破坏和非法存取;

为维护数据库的完整性,DBMS必须能够实现以下功能:
1、提供定义完整性约束条件的机制;
2、提供完整性检查的方法;
3、进行违约处理;

当参照表和被参照表发生不一致时,常采用以下策略:
1、拒绝执行(默认);
2、级联操作;
3、设置为空值;

第六章 关系数据理论

6.1 问题的提出

数据依赖:一个关系内部属性与属性之间的一种约束关系;这种约束关系是通过属性间的值相等与否体现出来的数据间相关联系;

关系模式存在的问题:
1、数据冗余;
2、更新异常;
3、插入异常;
4、删除异常;

6.2 规范化

Y函数依赖于X:设R(U)是属性集U上的关系模式,X,Y是U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等;即X->Y;
完全函数依赖:若X->Y,且对于X的任何一个真子集X‘,X’都无法确定Y,则称Y对X完全函数依赖;
部分函数依赖:若X->Y,Y不完全依赖于X;

超码:包含候选码的属性组合;

5NF4NF3NF2NF1NF
规范化:一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式;
1NF:每一个分量必须是不可分的数据项;
2NF:每一个非主属性都完全依赖于任何一个候选码;
3NF:每一个非主属性,既不传递依赖于码,也不部份依赖于码;
BCNF:每一个决定因素都包含码;即每个决定因素都是超码;
4NF:限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖,即只允许函数依赖;

多值依赖:X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X->->Y成立,当且仅当对于R(U)中的任意关系r,给定的一对(x,z)值,有一组Y值,这组值仅仅取决于x值而与z值无关;

多值依赖的性质:
1、传递性;
2、对称性;

规范化基本思想:逐步消除数据依赖中不合适的部分;

6.3 数据依赖的公理系统

推理规则:
1、自反律;
2、增广律;
3、传递律;
推出
1、合并规则;
2、伪传递规则;
3、分解规则;

6.4 模式分解

模式分解三个定义:
1、分解具有无损连接性;
2、分解要保持函数依赖;

第七章 数据库设计

7.1 数据库设计概述

数据库设计:对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,是指能够有效地存储和管理数据,满足用户的应用需求,包括信息管理要求和数据操作要求;

数据库设计的特点:三分技术,七分管理,十二分基础数据;

需求分析->概念结构设计->逻辑结构设计->物理结构设计->数据库实施->数据库运行和维护;

7.2 需求分析

重点:数据和处理
1、信息要求;
2、处理要求;
3、安全性和完整性要求;

方法:自顶向下、逐层分解;

数据字典的组成:数据项、数据结构、数据流、数据存储、处理过程;

7.3 概念结构设计

概念模型的特点:
1、真实、充分地反应现实世界,满足用户对数据的处理要求,是现实世界的一个真实模型;
2、易于理解;
3、易于更改,即针对环境变化作出修改和扩充;
4、易于向关系数据模型转换;

E-R模型
各子系统的E-R图之间的冲突有三类:
1、属性冲突:取值单位冲突、属性域冲突;
2、命名冲突:同名异义、异名同义;
3、结构冲突;

7.4 逻辑结构设计

任务:把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS所支持的数据模型相符合的逻辑结构;

实体型间的联系有以下情况:
1、一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并;
2、一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并;
3、一个m:n联系转换为一个关系模式;
4、三个或三个以上实体间的一个多元联系可以转换为一个关系模式;
5、具有相同码的关系模式可合并;

并不是规范化程度越高的关系就越优化;

7.5 物理结构设计

数据库的物理设计即为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程;

分两步:
1、确定数据库的物理结构;
2、对物理结构进行评价;

关系模式存取方法:
1、索引方法;
2、聚簇方法;

7.6 数据库的实施和维护

试运行:
1、先输入小批量数据做调试,待试运行基本合格后再大批量输入数据,逐步增加数据量,逐步完成运行评价;
2、做好数据库的转储和恢复工作;

维护方面主要包括:
1、数据库的转储和恢复;
2、数据库的安全性、完整性控制;
3、数据库性能的监督、分析和改造;
4、数据库的重组织与重构造;

第八章 数据库编程

8.1 嵌入式SQL

SQL编程技术能有效克服SQL语言实现复杂应用方面的不足,提高应用系统和DBMS间的互操作性;
嵌入式SQL即将SQL语句嵌入程序设计语言中,宿主语言有C++、java等;
对嵌入式SQL,DBMS一般采用预编译的方法,即先将SQL语言翻译成主语言调用语句,再执行;

数据库工作单元与源程序工作单元之间的通信:
1、向主语言传递SQL语句的执行状态信息,右SQL通信区实现;
2、主语言向SQL语句提供参数,主要由主变量实现;
3、将SQL语句查询数据库的结果交主语言处理,主要由主变量和游标实现;

8.3 存储过程和函数

过程化SQL块有两种类型:

类型 特点
匿名块 每次执行时都要进行编译,不能存储到数据库中,也不能在其他过程化SQL块中被调用
命名块 即过程和函数,被编译后保存在数据库中,称为持久性存储模块,可以反复调用,运行速度快

函数只是把PROCEDURE 改为 FUNCTION ,但必须指定返回的类型,即 RETURN <类型>;

8.4 ODBC编程

ODBC即开放数据库互连;
提出和产生ODBC的原因是存在不同的数据库管理系统;

工作原理概述:
1、用户应用程序;
2、ODBC驱动程序管理器;
3、数据库驱动程序;
4、ODBC数据源管理;

工作流程:
1、配置数据源;
2、初始化环境;
3、建立连接;
4、分配语句句柄;
5、执行SQL语句;
6、结果集处理;
7、中止处理;

8.5 OLE DB

OLE DB即对象连接与嵌入式数据库;

结构:
1、消费者;
2、提供者:分服务提供者和数据提供者;

8.6 JDBC编程

JDBC即java数据库连接;
JDBC是面向对象的接口标准,主要是管理存放在数据库中的数据;JDBC与ODBC类似,为JAVA程序提供统一、无缝地操作各种数据库地接口;使程序员使用JDBC编程时不用关心他要操作的数据库是哪个厂家地产品,提高了软件地通用性;

第九章 关系查询处理和查询优化

9.1 查询处理

查询处理步骤:
1、查询分析:进行语法检查、语法分析;
2、查询检查:语义检查;
3、查询优化:进行代数优化和物理优化;
4、查询执行;根据优化器得到的执行策略生成查询执行计划,有代码生成器生成;

9.2 查询优化

查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且系统能比用户程序的优化做得更好;

Q:为什么系统能做得更好?
A:1、优化器可以从数据字典中获取许多统计信息;
2、如果数据库的物理统计信息改变了,系统会自动进行优化以选择合适的计划;
3、优化器可以考虑上百种不同的执行计划;
4、优化器中包括有很多复杂的优化技术,而程序员难以掌握这些技术;

总代价 = I/O代价 + CPU代价 +内存代价 + 通信代价;
查询代价时一般用查询处理读写的块数作为衡量单位;

9.3 代数优化

启发式规则:
1、选择运算应尽可能先做;
2、把投影运算和选择运算同时进行;
3、把投影同其前或后的双目运算结合起来;
4、把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算;
5、找出公共子表达式;

9.4 物理优化

1、基于规则的启发式规则;
2、基于代价估算的优化;
3、两者结合的优化方法;

9.5 查询计划的执行

分自顶向下和自底向上两种执行方法;
自顶向下的执行方式是一种被动的、需求驱动的执行方式;
自底向上的执行方式是一种主动的执行方式;

第十章 数据库恢复技术

10.1 事务的基本概念

事务:事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位;

事务的特性:
A、原子性
B、一致性
C、隔离性
D、持续性

事务ACID特性可能遭到破坏的因素:
1、多个事务并行运行时,不同事务的操作交叉执行;
2、事务在运行过程中被强行停止;

10.2 数据库恢复概述

因此DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态的功能;

10.3 故障的种类

故障的种类 描述
事务内部的故障 非预期故障、意味着事务没有达到预期的终点,应进行事务撤销
系统故障 软故障、造成系统停止运转的任何事件,使得系统要重新启动,所有运行事务非正常终止
介质故障 硬故障、指外存故障,如磁盘损坏等,将破坏(部分)数据库,影响相关事务,可能性小,破坏性大
计算机病毒 人为故障 or 破坏,主要威胁

10.4 恢复的实现技术

1、数据转储:即DBA定期将整个数据库复制到磁带、磁盘or其他存储介质上保存起来的过程;这些备用数据称为后备副本;

分为静态存储和动态存储:

转储方式 描述 优点 缺点
静态转储 在系统中无运行事务时进行的转储操作 得到的一定是一个数据一致性的副本,操作简单 必须等正在运行的用户事务结束才能进行,降低数据库的可用性
动态转储 转储期间允许对数据库进行存取或修改 转储和用户事务可以并发执行 转储结束时后援副本上的数据并不保证正确有效,需要建立日志文件以保持一致性

2、日志文件:用来记录事务对数据库的更新操作的文件

日志文件的作用:
1、事务故障恢复和系统故障恢复必须用日志文件;
2、动态转储中必须建立日志文件,后备文件和日志文件结合起来;
3、静态转储中也能建立日志文件,确保一致性状态;

登录日志文件必须遵循两条原则:
1、登记的次序严格按并发事务执行的时间顺序;
2、必须先写日志文件,后写数据库;

Q:为什么必须先写日志文件,后写数据库?
A:先写日志文件,但没有修改数据库,按日志文件恢复时只不过多执行一次不必要的UNDO操作;而先写数据库,后写日志文件,则可能在两个操作之间发生故障,从而导致无法恢复这个修改;

10.5 恢复策略

事务故障的恢复:
1、反向扫描日志文件,查找该事务的更新操作;
2、对该事务的更新操作执行逆操作,即将更新前的值写入数据库;
3、继续反向扫描,做同样处理,知道读到此事务的开始标记,事务故障恢复即为完成;

系统故障的恢复:
1、正向扫描日志文件,找出故障发生前已经提交的事务,将其事务标记计入重做队列(REDO-LIST);找出故障发生时尚未完成的事务(无COMMIT记录),将其事务标记计入撤销队列(UNDO-LIST);
2、对撤销队列中各事务做撤销(UNDO)处理;
3、对重做队列中各事务做重做处理;

介质故障的恢复:
装入最新的数据库后备副本(离故障发生时刻最近的转储副本),是数据库恢复到最近一次转储时的一致性状态;对于动态转储的副本,还要装入转出开始的日志文件,利用恢复系统故障的方法进行恢复;

10.6 具有检查点的恢复技术

Q:为什么要引入具有检查点的恢复技术?
A:根据日志记录恢复时,搜索整个日志将耗费大量时间,很多需要重做的事务实际上已经将他们的更新操作结果写到了数据库中,然而恢复子系统又重新执行这些操作,浪费时间;所以在日志记录中增加检查点记录,即增加一个重新开始文件,改善恢复效率;

检查点记录的内容:
1、建立检查点时刻所有正在执行的事务清单;
2、这些事务最近一个日志记录的地址;

使用检查点方法进行恢复的步骤:
1、从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;
2、由该检查点记录得到检查点建立时刻所有正在执行的事务清单,先把这些事务全部放入UNDO-LIST;
3、正向扫描,遇到新的事务,先放入UNDO-LIST,如有提交的事务,则移动到REDO-LIST,直到日志文件结束;
4、对UNDO-LIST进行UNDO操作;对REDO-LIST进行REDO操作;

10.7 数据库镜像

Q:为什么引入数据库镜像?
A:磁盘容量逐渐增大,为避免磁盘介质出现故障从而影响数据库的可用性,许多DBMS提供数据库镜像功能使用户数据库恢复;

DBA定期将数据库or其中关键数据复制到另一个磁盘,并确保一致性;

好处:
1、一旦出现介质故障,镜像磁盘可以继续提供使用,同时,DBMS可同时进行数据库恢复;
2、没有故障时,数据库镜像可用于并发操作,当一个用户对数据加X锁时,其他用户可以读镜像数据库上的数据,而不用等该用户释放锁;

缺点:
数据库镜像通过复制数据实现,频繁复制降低系统运行效率;

第十一章 并发控制

11.1 并发控制概述

事务是并发控制的基本单位;
为保证事务的隔离性一致性,DBMS必须实现并发控制;

并发操作带来的数据不一致性:
1、丢失修改
T1、T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失;

2、不可重复读
T1读取数据后,T2执行更新操作,T1无法再现前一次读取的结果;
幻读:
T1读取数据后,T2插入/删除其中的部分数据,T1再次按相同条件读取时,发现记录变多了/消失了;

3、读脏数据:
T1修改数据并写入磁盘,T2读取同一数据后,T1由于某种原因被撤销,此时被T1修改的数据恢复原值,T2读到的数据就与数据库中的数据不一致;

11.2 封锁

封锁:事务T在对某个数据对象进行操作之前,现象系统发出请求,对其加锁,在T释放它的锁之前,其他事务无法更新此对象;
排他锁:即写锁、X锁;只允许T读取和修改数据A;
共享锁:即读锁、S锁;T对A加S锁后,T可以读A,但不能写A,其他事物也能对A加S锁,但不能加X锁;

11.3 封锁协议

封锁协议:运用X锁和S锁对数据对象进行加锁时,规定何时申请锁,持续时间,何时释放等要求;

一级封锁协议:T在修改数据R之前必须先对R加X锁,直到事务结束才释放;

二级封锁协议:在一级封锁协议基础上,增加T在读取数据R之前必须先对其加S锁,"读完即可释放"S锁;

三级封锁协议:在一级封锁协议基础上,增加T在读取数据R时必须先对其加S锁,"直到事务结束"才释放;

不同级别的封锁协议和一致性保证:
在这里插入图片描述

11.4 活锁与死锁

活锁:系统一直批准别的事务对数据的封锁,从而使某一事务可能永远等待的情况;

解决策略:先来先服务;

死锁:多个事务相互相互对所以已封锁的数据进行封锁申请,造成这些事务都无法进行的局面;

死锁预防:
一次封锁法;顺序封锁法;

死锁的诊断和解除:
检测:超时法;事务等待图法;
解除:选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的锁,让其他事务执行下去;

11.5 并发调度的可串行性

可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,则称为可串行化调度;
可串行调度是并发事务正确调度的准则;当且仅当它是可串行化的,才认为是正确调度;

冲突操作:不同事物对同一个数据的读写操作和写写操作;
冲突可串行化:调度Sc保证冲突操作的次序不变的情况下,交换两个事务不冲突操作的次序得到零一调度Sc‘,若Sc’是串行的,称调度Sc为冲突可串行化调度;

冲突可串行化调度是可串行化调度的充分不必要条件;

11.6 两段锁协议

Q:为什么引入两段锁协议?
A:为了保证并发调度的正确性,从而保证调度是可串行化的;

原则:
1、获得封锁(扩展阶段):对任何数据进行读、写之前,首先要申请获得对该数据的封锁;
2、释放封锁(收缩阶段):释放一个封锁之后,事务不再申请和获得任何其它封锁;

事务遵循两段锁协议是可串行化调度的充分不必要条件;

Q:一次封锁法与两段锁协议的区别?
A:一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则不能继续执行,因此它必遵守两段锁协议且不会导致死锁;但两段锁协议不要求事务必须一次将所有要使用的数据全部加锁,所以可能导致死锁;

11.7 封锁的粒度

粒度:封锁对象的大小;(封锁对象可以是逻辑单元或者物理单元)

粒度越大,数据库所能封锁的数据单元就越小,并发度越小,开销较小;
粒度越小,数据库所能封锁的数据单元就越大,并发度越大,开销较大;

多粒度封锁:同时支持多种封锁力度供不同的事务选择;
多力度封锁协议:给节点i加锁意味着i节点的所有后裔节点也被加同类型的锁;

显示封锁:应事务要求直接加到数据对象上的锁;
隐式封锁:该数据对象没有被独立加锁,是由于其上级节点加锁而使该数据对象加上了锁;
两者效果一样;

Q:为什么要引入意向锁?
A:未引入之前,对某个数据对象加锁,系统要检查它的上级节点有没有被加锁,检查它的后裔节点加的显示封锁是否冲突;引入之后,引入意向锁之后,DBMS无需检查下一级节点的显示封锁;

意向锁:如果对一个节点加意向锁,则说明该节点正在被加锁;对任一节点加锁时,必须对它的上层节点加意向锁;

IS锁:若对某数据对象加IX锁,表示它的某个后裔节点拟加S锁;

IX锁:若对某数据对象加IX锁,表示它的某个后裔节点拟加X锁;

SIX锁:若对某数据对象加SIX锁,表示对它加S锁,再加IX锁;

数据锁的相容矩阵:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wyll19980812/article/details/105941100