绪论
数据库系统概述
数据
数据是描述事物的符号记录
数据与其语义是不可分的
数据库
数据库是长期储存在计算机内、有组织的、可共享的大量数据集合
数据库按一定的数据模型组织、描述和储存
数据库管理系统(DBMS)
DBMS是数据管理软件
功能:数据定义,数据操纵,数据库运行管理,数据库建立和维护
数据库系统(DBS)
由数据库,DBMS,应用程序和数据库管理员(DBA)组成的存储,管理,处理和维护数据的系统
数据管理技术
经历了三个阶段:
-
人工管理阶段
数据不保存,应用程序管理数据,数据不共享,不具有独立性
-
文件系统
数据可以长期保存,有文件系统管理数据,数据共享性差,冗余度大,独立性差
-
数据库系统
特点:数据结构化,共享性高,冗余度低且易扩充,独立性高,由DBMS统一管理和控制
高共享性的好处:降低数据冗余度,节省空间,避免数据间的不一致性,使系统易于扩充
数据独立性分为物理独立性和逻辑独立性。
DBMS提供以下功能:数据安全性保护,数据完整性检查,并发控制,数据库恢复
数据的结构化
整体数据的结构化是数据库的主要特征之一
数据的结构用数据模型描述,无需程序定义和解释
数据可以变长
数据的最小存取单位是数据项
数据模型
数据模型是对现实世界数据特征的抽象,是用来描述数据,组织数据,对数据进行操作的
数据模型由数据结构,数据操作和数据的完整性约束条件三部分组成。
-
数据结构:对象类型的集合
与数据类型、内容、性质有关的对象
与数据之间的联系有关的对象
-
数据操作
- 检索
- 更新(增删改)
-
数据完整性约束
一组完整性规则的集合
两类数据模型
-
概念模型
-
实体:客观存在并可相互区别的事物
-
属性:实体所具有的某一特性
-
域:属性的取值范围称为该属性的域
-
码:唯一标识实体的属性集
-
实体型:用实体名及其属性名来抽象刻画同类实体
entity(attribute1,attribute2,attribute3)
-
实体集:同一类型实体的集合
-
联系:一般指不同实体集之间的联系
联系的类型:一对一、一对多、多对多
概念模型的表示方法:E-R方法
-
-
逻辑模型
主要包括层次模型、网状模型、关系模型等
关系模型
关系模型是最重要的一种数据模型,关系数据库系统采用关系模型作为数据的组织方式
数据结构
关系模型由一组关系组成,每个关系的数据结构是一张规范化的二维表
-
关系:一个关系对应一张表
-
元组:表中的一行
-
属性:表中的一列
-
主码:表中的某个属性组,可以唯一确定一个元组
-
域:属性的取值范围
-
分量:元组的一个属性值
-
关系模式:对关系的描述
关系名(属性1,属性2,属性3)
关系模型要求关系必须是规范化的,关系的每一个分量必须是一个不可分的数据项
数据操纵和完整性约束
数据操纵主要包括查询、插入、删除、更新数据。这些从操作必须满足完整性约束条件:实体完整性,参照完整性,用户定义完整性
关系模式中的数据操作是集合操作,操作对象和操作结果都是关系
关系模型的优缺点
优点:
- 建立在严格的数学概念基础上
- 概念单一,数据结构简单清晰,用户易懂易用
- 关系模型的存取路径对用户隐蔽
缺点:
- 查询效率不如非关系数据模型
- 为提高性能必须对用户的查询请求进行优化
数据库系统的结构
数据库系统模式
模式是数据库中全体数据的逻辑结构和特征的描述,模式的一个具体值称为一个实例
三级模式结构
- 模式:数据库中全体数据的逻辑结构和特征的描述
- 外模式:数据库用户能看见和使用的局部数据的逻辑结构和特征的描述
- 内模式:数据物理结构和存储方式的描述,是数据在数据库内部的组织方式
数据库系统的组成
-
硬件平台及数据库
-
软件
操作系统,DBMS,开发工具,应用系统,编译系统
-
人员
数据库管理员,系统分析员,数据库设计人员,应用程序员,用户
关系数据库
数据结构及形式化定义
关系
现实世界的实体以及实体间的各种联系均用关系来表示
- 域:一组具有相同数据类型的值的集合
- 笛卡尔积:域上的集合运算,是所有域的所有取值的一个组合
- 基数:笛卡尔积运算后的元组个数
- 关系:D1xD2x…xDn的子集叫做在域D1,D2…Dn上的关系,表示为R(D1,D2…Dn)。R为关系的名字,n为关系的目或度
- 候选码:若关系中的某一属性值能唯一的标识一个元组,其子集不能,则称该属性组为候选码
- 主码:若一个关系有多个候选码,则选一个为主码
- 主属性:候选码的诸属性
- 非主属性:不包含在任何候选码中的属性
- 全码:关系模式的所有属性是这个关系模式的候选码
关系有以下三种类型:
- 基本关系(基本表):实际存在的表
- 查询表:查询结果对应的表
- 视图表:按基本表或其他视图表导出的表
基本关系具有以下性质:
- 列是同质的:每一列中的分量是同一类型的数据,来自同一个域
- 不同的列可出自同一个域
- 列的顺序无所谓
- 行的顺序无所谓
- 任意两个元组的候选码不能取相同的值
- 分量必须取原子值,不可再分
关系模式
**关系的描述称为关系模式,关系模式是型,关系是值。**关系模式可以形式化的表示为R(U,D,dom,F)。R:关系名 U:组成该关系的属性名集合 D:属性组U中属性所来自的域 dom:属性向域映像的集合 F:属性间的数据依赖关系集合
关系是关系模式在某一时刻的状态或内容,是动态的。关系模式是对关系的描述,是静态的
关系操作
基本关系操作
-
查询
前五种为基本操作
- 选择
- 投影
- 并
- 差
- 笛卡尔积
- 连接
- 除
- 交
-
插入
-
删除
-
修改
SQL
结构化查询语言,集查询,数据定义语言,数据操纵语言,数据控制语言于一体的关系数据语言
关系的完整性
-
实体完整性
若属性A为主属性,则A不能取空值
-
参照完整性
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码,如果F与Ks相对应,则称F为R的外码,并称基本关系R为参照关系,基本关系S为被参照关系
参照完整性:对于R中每个元组在F上的值必须
- 或者取空值
- 或者等于S中某个元组的主码值
-
用户定义完整性
针对某一具体关系数据库的约束条件
关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。分为传统的集合运算和专门的关系运算
传统集合运算
- 并 ∪
- 差 -
- 交 ∩
- 笛卡尔积 x
专门的关系运算
-
选择 σ
根据某些条件对关系做水平分割,即选取符合条件的元组
-
投影 Π
对一个关系做垂直分割,即选择部分列
-
连接 ∞
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- 等值连接:满足条件为=
- 自然连接:一种特殊的等值连接,两个关系中进行比较的分量必须是相同属性组,去除了重复的属性列。
-
外连接:连接运算的扩展,可以处理缺失信息,保留非匹配元组
- 左外连接:取出左侧关系所有与右侧关系任意元组都不匹配的元组,用空值填充右侧关系的属性,再加到自然连接的结果上
-
右外连接
-
全外连接
-
除 ÷(不做要求)
设关系R除以关系S的结果为关系T,则T包含所有在R但不在S的属性及其值,且T的元组与S的元组都在R中
关系表达式
查询语句的关系表达式的一般形式
例:
SQL
概述
SQL 结构化查询语言,是关系数据库的标准语言
特点
-
综合统一
集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)于一体
-
高度非过程化
存取路径选择以及SQL操作过程由DBMS系统自动完成
-
面向集合的操作方式
操作对象,增删改查的对象可以是元组的集合
-
以同一种语法结构提供多种使用方法
SQL能独立用于联机交互,也可以嵌入高级语言供程序员使用
-
语言简洁,易学易用
数据定义
模式
create schema <模式名> authorization <用户名>;
drop schema <模式名> <cascade|restrict>;
restrict下若有下属表或视图等数据库对象,则拒绝该命令的执行,cascade为全部删除
表
-
创建
create table <表名>( <列名> <数据类型> [完整性约束条件] [,<列名> <数据类型> [完整性约束条件]] ... [,<表级完整性约束条件>]);
-
常用数据类型
char(),varchar(),int,smallint,bigint,float(),decimal,boolean,date(YYYY-MM-DD),time(HH:MM:SS),timestamp(时间戳),interval(时间间隔)…
-
常用完整性约束
- 主码约束 primary key:一定是not null,在建立时会默认建立该域的索引,此主码可以作为另外表的外码
- 唯一约束 unique
- 非空约束 not null
- 参照完整性约束
-
修改
alter table <表名> [add <新列名> <数据类型> [完整性约束条件]] [add <表级完整性约束>] [drop <列名> [cascade|restrict]] [drop constraint <完整性约束名> [cascade|restrict]] [alter column <列名> <数据类型>];
-
删除
drop table <表名> [restrict|cascade];
索引
-
创建
create [unique] [cluster] index <索引名> on <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
唯一值索引:对于已含重复值的属性列不能建unique索引,在unique索引建立后,相当于增加一个unique约束
聚簇索引:指索引项的顺序与表中记录的物理顺序一致的索引组织,适用范围为更新较少的列
-
修改
alter index <旧索引名> rename to <新索引名>;
-
删除
drop index <索引名>;
数据字典
数据字典是DBMS内部的一组系统表,记录了数据库中所有的定义信息,包括关系模式定义,视图定义,索引定义,完整性约束定义,用户操作权限,统计信息等。
数据查询
一般格式:
select [all|distinct] <目标列表达式> [别名][,<目标列表达式> [别名]]...
from <表/视图名/select语句> [as 别名][,<表/视图名/select语句> [as 别名]]...
[where <条件表达式>]
[group by <列名1> [having <条件表达式>]]
[order by <列名2> [asc|desc]];
条件语句:
-
比较:<,<=,>,>=,=,!=,not
-
确定范围: [not] between A and B
-
确定集合:[not] in
-
字符匹配:[not] like
通配符:%代表任意长度字符串,_代表任意单个字符
-
空值:is [not] null
-
多重条件:and,or,not
集函数:
- 计数:count([distinct] <*|别名>)
- 求和:sum([distinct] <别名>)
- 平均值:avg([distinct] <别名>)
- 最大最小值:max\min([distinct] <别名>)
使用group by后select字句列名只能出现分组属性和集函数
分组后集函数分别作用于每个组
连接查询
-
等值连接:连接运算符为=的连接操作
-
自然连接:特殊的等值连接,把目标列中重复的属性列去掉。
-
非等值连接
-
外连接:将主题表中不满足连接条件的元组一并输出
left/right outer join <表名> on <条件表达式>
嵌套查询
子查询不能使用order by
谓词
- any:满足任意一个
- all:满足所有
- [not] exists:内层查询结果非空返回true,空返回false,加not相反
集合查询
-
并
<查询块> union [all] <查询块>
all:保留重复元组,缺失默认不保留
-
交
<查询块> intersect <查询块>
-
差
<查询块> except <查询块>
order by只能用于对最终结果排序,所以在此处正确用法为
<查询块> <集合操作> <查询块> order by
数据更新
插入数据
-
插入单/多个元组
insert into <表名> [(<属性1>[,<属性2>...])] values (<常量1>[,<常量2>...])[,(下一组数据)...];
-
插入子查询结果
insert into <表名> [(<属性1>[,<属性2>...])] 子查询;
修改数据
update <表名> set 列名=<表达式>[,<列名>=<表达式>...] [where <条件>];
删除数据
delete from <表名> [where <条件>];
视图
特点
- 虚表,只是从一个或几个基本表或视图导出的表
- 只存放视图的定义,不会出现数据冗余
- 基本表数据变化,视图查询出的数据跟着变化
视图的作用
- 简化用户操作
- 使用户能以多种角度看待同一数据
- 对重构数据库提供了一定程度的逻辑独立性
- 能够对机密数据提供安全保护
- 适当利用可以更清晰的表达查询
行列子集视图
- 从单个基本表导出
- 只去掉了某些行和列
- 保留了码
定义视图
-
建立视图
create view <视图名> [(<列名[,<列名>...]>)] as <子查询> [with check option];
-
列名只能全部省略或全部指定
-
with check option表示对视图进行更新时要保证更新的行满足视图定义中的谓词条件
-
DBMS执行创建视图时只是将视图的定义存入数据字典,并不执行其中的select语句
-
-
删除视图
drop view <视图名> [cascade];
-
从数据字典删除指定的视图定义
-
如果该视图上还导出了其他视图,用cascade级联删除可以把该视图和由他导出的视图一起删除
-
删除基表是,由该表导出的所有视图都必须显式的用drop table删除
-
查询视图
语句与查询表相同
DBMS实现视图查询的方法:视图消解法
- 进行有效性检查,检查查询的表,视图是否存在
- 把视图定义中的子查询语句与用户查询结合起来,转化成等价的对基本表的查询
- 执行修正后的查询
更新视图
语句与更新表相同
DBMS实现视图更新的方法:视图消解法
数据库安全性
概述
- 数据库安全性是指保护数据库以防止不合法使用所造成的数据泄漏、更改或破坏
数据库安全性控制
用户身份鉴别
- 静态口令鉴别
- 动态口令鉴别
- 生物特征鉴别
- 智能卡鉴别
存取控制
- 定义用户权限
- 合法权限检查
自主存取控制
授权:定义存取权限
-
主要通过grant和revoke语句实现
grant <权限>[,<权限>...] on <对象类型> <对象名> [,<对象类型><对象名>...] to <用户>[,<用户>...] [with grant option];
指定了with grant option时,获得了权限的用户还可以把这种权限继续分发给其他用户
例:
grant select,update(sno) on table student to user1 with grant option;
revoke <权限>[,<权限>...] on <对象类型> <对象名> [,<对象类型><对象名>...] from <用户>[,<用户>...] [restrict|cascade];
指定restrict时如果被撤销用户还授权给了其他用户则拒绝执行
指定cascade时则级联撤销
-
创建数据库模式的权限
一般由DBA创建用户时实现
create user <username> [with] [dba|resource|connect];
只有DBA用户可以创建新模式
-
数据库角色
角色是权限的集合
- 创建角色
create role <角色名>;
- 为角色赋予权限
grant <权限>[,<权限>...] on <对象类型> <对象名> [,<对象类型><对象名>...] to <角色>[,<角色>...] [with admin option];
- 将角色赋予用户或其他角色
grant <角色>[,<角色>...] to <角色>[,<用户>...] [with admin option];
- 收回角色权限
revoke <权限>[,<权限>...] on <对象类型> <对象名> from <角色>[,<角色>...] ;
- 收回用户的角色
revoke <角色> from <用户>;
强制存取控制
- 每一个数据库对象被赋予一定的密级,每个用户授予某个级别的许可证,对任意一个对象只有拥有合法许可证的用户才能存取
视图机制
- 可以为不同用户定义不同的视图,将数据对象限制在一定的范围内
审计
- 将用户对数据库的所有操作记录自动记录下来放在审计日志,审计员可以根据日志数据找出非法存取的用户,时间,内容等
数据加密
根据一定的算法将原始数据(明文)变换为不可直接识别的密文,从而使不知道解密算法的人无法获知内容
- 存储加密
- 传输加密
数据库完整性
-
指数据的正确性和相容性
-
DBMS维护数据库完整性,必须能够实现以下功能
-
提供定义完整性约束条件的机制
一般由DDL语句实现,并作为模式的一部分存入数据库
-
提供完整性检查的方法
在insert,pdate,delete执行后开始检查,也可以在事务提交时检查
-
进行违约处理
如果用户操作使数据违背完整性约束条件,则采取一定动作
- no action 拒绝执行该操作
- cascade 级联执行其他操作
-
实体完整性
在create table中用primary key定义
定义
单属性构成的码可定义成列级或表级约束条件
多属性构成的码只能定义成表级约束条件
违约处理
用户更新表时,DBMS自动进行检查,如果主码值不唯一或主码的某一属性为空,则拒绝更新
参照完整性
在create table中用foreign key定义
违约处理
- no action 拒绝该操作,为默认策略
- cascade 级联操作
- set null
用户定义完整性
针对某一具体应用的数据必须满足语义要求
属性上的约束条件
- not null
- unique
- check (条件式)
check (sage < 29)
check (ssex in ('男','女'))
在对表进行更新时如果违约则会拒绝执行
元组上的约束条件
相比约束属性,约束元组可以提供不同属性之间的相互约束条件
check (ssex = '女' or sname not like 'Ms.%')
完整性约束命名子句
创建
constraint <完整性约束条件名> <完整性约束条件>
可以添加not null,unique,check,primary key,foreign key等
修改
alter table <表名>
[add <新列名> <数据类型> [完整性约束条件]]
[add <表级完整性约束>]
[drop <列名> [cascade|restrict]]
[drop constraint <完整性约束名> [cascade|restrict]]
[alter column <列名> <数据类型>];
断言
- 用于指定更具一般性的约束,可以定义涉及多个表或聚集操作的比较复杂的完整性约束。断言创建后,任何对断言中所涉及关系的操作都会触发对断言的检查,断言为假则会拒绝执行
触发器
-
由用户定义的在关系表上的一类由事件驱动的特殊过程
当指定的事件发生时,对规则的条件进行检查,如果成立则执行指定的动作
关系数据理论
问题的提出
数据依赖是一个关系内部属性与属性之间的一种约束关系,这种约束关系通过属性间值的相等与否体现出来的数据间的相互联系。数据依赖最重要的两种类型:
- 函数依赖
- 多值依赖
规范化
操作异常
- 数据冗余:属性重复出现
- 更新异常:应该更新的数据未被更新
- 删除异常:不该删除的数据被删除
- 插入异常:应该插入的数据未被插入
函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称"X函数确定Y"或"Y函数依赖于X",记作X→Y
- 如果X→Y且Y→X,则记为X←→Y
- 若X→Y,则X称为这个函数依赖的决定因素
在关系模式R(U)中,对于U的子集X和Y,
-
如果X→Y,但Y⊄X,则称X→Y是非平凡的函数依赖
-
若X→Y,但Y⊆X,则称X→Y是平凡的函数依赖
例:在关系SC(Sno,Cno,Grade)中
非平凡函数依赖:(Sno,Cno)→Grade
平凡函数依赖:(Sno,Cno)→Sno
(Sno,Cno)→Cno
码
- 主属性:包含在任何一个候选码中的属性
- 非主属性
- 全码:整个属性组是候选码的情况
外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign key)
多值依赖
设R(U)是一个属性集U上的一个关系模式,X、Y和Z是U的子集,并且Z=U-X-Y,多值依赖X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关
- 平凡多值依赖:Z=φ
- 非平凡多值依赖
范式
关系数据库中的关系要满足一定要求,满足的程度不同即为不同范式
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)
- 1NF:关系模式R的所有属性都是不可分的基本数据项
- 2NF:关系模式R中的每一列都完全函数依赖于主码
- 3NF:关系模式R中的每一列数据都直接依赖于主码,而不能间接依赖
- BCNF:关系模式R的主码的每个属性都不能函数依赖于其他主码属性
- 4NF:关系模式R的属性间不能有非平凡且非函数依赖的多值依赖
一个完全规范化的设计并不总能生成最优的性能,因为需要更多的连接操作从而影响查询速度。所以引入反规范化,是查询效率与数据冗余的折中。
数据库设计
基本步骤
-
需求分析:综合各个用户的应用需求
-
概念结构设计:形成独立于机器特点,独立于各个数据库管理系统产品的概念模式(E-R图)
-
逻辑结构设计
-
首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式
-
然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式
-
-
物理结构设计:根据数据库管理系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式
-
数据库实施
-
数据库运行和维护
需求分析
-
数据字典:是关于数据库中数据的描述的集合,而不是数据本身。数据字典在需求分析阶段建立,是进行详细的数据收集和数据分析所获得的主要结果,在数据库设计过程中不断修改完善。数据字典在数据库设计中占有很重要的地位
组成:
- 数据项:数据的最小组成单位
- 数据结构:若干个数据项组成一个数据结构
- 数据流:数据结构在系统内的传输路径
- 数据存储:数据结构停留或保存的地方,也是数据流的来源和去向之一
- 处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息
概念结构设计
- 将需求分析得到的用户抽象为信息结构(概念模型)的过程就是概念结构设计
方法:抽象数据并设计局部视图,集成局部视图
概念模型
特点:
- 能真实、充分地反映现实世界,是现实世界的一个真实模型
- 易于理解,从而可以用它和不熟悉计算机的用户交换意见
- 易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充
- 易于向关系、网状、层次等各种数据模型转换
描述概念模型的有力工具是E-R模型
各子系统的E-R图之间的冲突:
- 属性冲突
- 命名冲突
- 结构冲突
逻辑结构设计
- 把概念结构设计阶段设计好的基本E-R图转换为与选用的DBMS产品所支持的数据模型相符合的逻辑结构
E-R图向关系模型的转换
- 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一段合并
- 一个1:n联系可以转换为一个独立的关系模式,也可以和n端合并
- 一个m:n的联系转换为一个关系模式
- 三个或三个以上的实体间的一个多元联系可以转换为一个关系模式
- 具有相同主码的关系模式可以合并
数据库恢复技术
事务
- 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位
- 事务是恢复和并发控制的基本单位
特性:ACID
- 原子性:事务中包括的所有操作要么都做,要么都不做
- 一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态
- 隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的
- 持续性:事务一旦提交,对数据库的改变是永久的
故障
- 事务故障
- 系统故障
- 介质故障
- 计算机病毒
恢复的实现技术
- 数据转储:定期将数据库复制到其他存储介质保存
- 动态海量存储
- 静态海量存储
- 动态增量存储
- 静态增量存储
- 登记日志文件
- 内容:记录事务对数据库更新操作的文件
- 用途:
- 进行事务故障恢复
- 进行系统故障恢复
- 协助后备副本进行介质故障恢复
小结
- 保证数据一致性是对数据库的最基本的要求
- 事务是数据库的逻辑工作单位
- DBMS必须对事务故障,系统故障和介质故障进行恢复
- 恢复中经常使用的技术:数据转储和登记日志文件
- 恢复的基本原理:利用存储在后备副本,日志文件和数据库镜像中的冗余数据来重建数据库
并发控制
概述
多事务执行方式:
- 串行执行
- 交错执行
- 并行执行
并发操作带来数据不一致性:
- 丢失修改:丢失修改是指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。
- 不可重复读:不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。
- 读“脏”数据:事务1修改某一数据,并将其写回磁盘。事务2读取同一数据后事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值,事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据
封锁
- 封锁是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放锁之前,其他事务不能更新此数据对象。封锁是实现并发控制的重要技术
类型:
- 排他锁(X锁/写锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
- 共享锁(S锁/读锁):若事务T对数据对象A加上S锁,则只允许T读取A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
活锁和死锁
解决方法:
- 活锁:采用先来先服务策略
- 死锁:超时法或等待图法
并发调度的可串行性
几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度
封锁粒度
- 封锁的粒度即为封锁对象的大小
- 封锁的粒度越大,系统被封锁的对象越少,并发度越低,系统开销越小。所以选择封锁粒度时需要考虑封锁并发度因素,对系统开销和并发度进行权衡。