数据(Data):是数据库中存储的基本对象
数据的定义:描述事物的符号记录
数据的种类:文字、图形、图象、声音等
数据的特点:数据与其语义是不可分的
数据库(Database,简称DB):是长期储存在计算机内、有组织的、可共享的大量数据集合
数据库管理系统(Database Management System,简称DBMS):是位于用户与操作系统之间的一层数据管理软件。
DBMS的用途:科学地组织和存储数据、高效地获取和维护数据。
DBMS的主要功能:
数据库的运行管理 保证数据的安全性、完整性 多用户对数据的并发使用
发生故障后的系统恢复 数据库的建立和维护功能(实用程序) 数据库数据批量装载
数据库转储 介质故障恢 数据库的重组织 性能监视等
数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。
数据库系统的构成:由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。(三树一人)
数据管理:对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题
数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
数据模型分成两个不同的层次
(1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模。
(2) 数据模型 主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模。
客观对象的抽象过程---两步抽象:① 现实世界中的客观对象抽象为概念模型;② 把概念模型转换为某一DBMS支持的数据模型。
数据结构:对象类型的集合 即数据结构是对系统静态特性的描述
两类对象:①与数据类型、内容、性质有关的对象 ②与数据之间联系有关的对象
数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作及有关的操作规则
数据操作的类型:检索 更新(包括插入、删除、修改)
数据模型对操作的定义:
①操作的确切含义 ;②操作符号;③操作规则(如优先级);④ 实现操作的语言数据模型对操作的定义
数据操作是对系统动态特性的描述。
数据模型对约束条件的定义:反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。
信息世界中的基本概念
(1) 实体(Entity)
客观存在并可相互区别的事物称为实体。
(2) 属性(Attribute)
实体所具有的某一特性称为属性。
一个实体可以由若干个属性来刻画。
(3) 码(Key)
唯一标识实体的属性集称为码。
(4) 域(Domain)
属性的取值范围称为该属性的域。
(5) 实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画
同类实体称为实体型
(6) 实体集(Entity Set)
同型实体的集合称为实体集
联系(Relationship)
现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
实体内部的联系通常是指组成实体的各属性之间的联系 。
实体之间的联系通常是指不同实体集之间的联系。
两个实体型间的联系
概念模型的表示方法
实体-联系方法(E-R方法):
①用E-R图来描述现实世界的概念模型;
②E-R方法也称为E-R模型;
常用数据模型
非关系模型:层次模型(Hierarchical Model);网状模型(Network Model )
2.数据结构:以基本层次联系为基本单位
基本层次联系:两个记录以及它们之间的一对多(包括一对一)的联系
表示方法
实体型:用记录类型描述。每个结点表示一个记录类型。
属性:用字段描述。每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之间的一对多的联系。
层次模型的特点:
层次模型的优缺点:
网状数据模型的数据结构
网状模型:满足下面两个条件的基本层次联系的集合为网状模型。①允许一个以上的结点无双亲;②一个结点可以有多于一个的双亲。
表示方法(与层次数据模型相同)
实体型:用记录类型描述。 每个结点表示一个记录类型。
属性:用字段描述。 每个记录类型可包含若干个字段。
联系:用结点之间的连线表示记录(类)型之间的一对多的父子联系。
网状模型与层次模型的区别 : 网状模型允许多个结点没有双亲结点 ;网状模型允许结点有多个双亲结点; 网状模型允许两个结点之间有多种联系(复合联系) ;网状模型可以更直接地去描述现实世界 ;层次模型实际上是网状模型的一个特例
网状模型的优缺点:
关系模型的基本概念
关系(Relation)一个关系对应通常说的一张表。
元组(Tuple)表中的一行即为一个元组。
属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名。关系必须是规范化的,满足一定的规范条件
表示方法
实体型:用关系表表示
属性:用属性名表示
联系: 一对一:隐含在实体对应关系中
一对多:隐含在实体对应关系中
多对多:用新的关系表表示
关系必须是规范化的,满足一定的规范条件,如 不允许表中还有表。最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。
关系数据模型的优缺点
关系数据模型的操纵与完整性约束
关系模型的完整性约束
关系数据模型的存储结构
① 表以文件形式存储
② 有的DBMS一个表对应一个操作系统文件
③ 有的DBMS自己设计文件结构
关系模型的优缺点
① 存取路径对用户透明导致查询效率往往不如非关系数据模型
② 为提高性能,必须对用户的查询请求进行优化
③ 增加了开发数据库管理系统的难度
数据库的二级映像功能与数据独立性
外模式/模式映像
映象定义通常包含在各自外模式的描述中保证数据的逻辑独立性 ;当模式改变时,数据库管理员修改有关的外模式/模式映象,可以使外模式保持不变; 应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。 修改 外模式/模式 的映射(create view) 外模式/模式映象可以保证获得一定程度的数据的逻辑独立性(非 完全独立)。
模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系 。例如,说明逻辑记录和字段在内部是如何表示的。
数据库中模式/内模式映象是唯一的。 该映象定义通常包含在模式描述中。保证数据的物理独立性。
当数据库的存储结构改变了,数据库管理员修改模式/ 内模式映象,使模式保持不变。例如,存储结构:由堆存储—hash存储, 从而应用程序不受影响。
保证了数据与程序的物理独立性,简称数据的物理独立性 。
模式/内模式映象保证获得完全的数据物理独立性
分布式结构的数据库系统
数据库管理员(DBA)
关系
域(Domain)
域是一组具有相同数据类型的值的集合。例:
1. 整数
2.介于某个取值范围的日期
3.{‘男’,‘女’}
4.长度指定长度的字符串集合
5.介于某个取值范围的整数
6.实数
笛卡尔积(Cartesian Product)给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn={(d1,d2,…,dn)|diÎDi,i=1,2,…,n}
所有域的所有取值的一个组合 不能重复
元组(Tuple)笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组。
关系(Relation)
1) 关系
D1×D2×…×Dn的子集叫作在域D1,D2,…,Dn上的关系,表示为 R(D1,D2,…,Dn)
R:关系名
n:关系的目或度(Degree)
2) 元组
关系中的每个元素是关系中的元组,通常用t表示。
3) 单元关系与二元关系
当n=1时,称该关系为单元关系(Unary relation)。
当n=2时,称该关系为二元关系(Binary relation)
4) 关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。
5) 属性
关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。 n目关系必有n个属性。
6) 码
候选码(Candidate key)
①若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
②在最简单的情况下,候选码只包含一个属性。称为全码(All-key)
在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)
主码
若一个关系有多个候选码,则选定其中一个为主码(Primary key)主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute)
7) 三类关系
基本关系(基本表或基表)实际存在的表,是实际存储数据的逻辑表示。
查询表 结果对应的表。
视图表 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
基本关系的性质
① 列是同质的(Homogeneous)
每一列中的分量是同一类型的数据,来自同一个域
② 不同的列可出自同一个域
其中的每一列称为一个属性 不同的属性要给予不同的属性名
③ 列的顺序无所谓
列的次序可以任意交换 ,遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列,但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了属性顺序。
④ 任意两个元组不能完全相同
由笛卡尔积的性质决定但许多关系数据库产品没有遵循这一性质。例如:Oracle,FoxPro等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件。
⑤ 行的顺序无所谓
行的次序可以任意交换,遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行,但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了元组的顺序。
⑥ 分量必须取原子值
每一个分量都必须是不可分的数据项。这是规范条件中最基本的一条
关系模式(Relation Schema)是型。关系是值关系模式是对关系的描述,它包括以下要素:
元组集合的结构:关系模式定义了元组的集合,每个元组代表关系中的一个实例。
属性构成:关系模式指定了关系中的属性,每个属性代表关系中的一个特征或字段。
属性来自的域:每个属性来自于一个特定的域,域定义了属性的取值范围。
属性与域之间的映象关系:关系模式指定了属性与域之间的映射关系,确保属性的取值符合域的要求。
元组语义以及完整性约束条件:关系模式可以包含有关元组语义和完整性约束条件的描述,用于限制关系中的数据。
属性间的数据依赖关系集合:关系模式可以包含属性间的数据依赖关系集合,用于描述属性之间的相互关系,例如主键、外键、函数依赖等。
定义关系模式
关系模式可以形式化地表示为:
R(U,D,dom,F)
R | 关系名 |
U | 组成该关系的属性名集合 |
D | 属性组U中属性所来自的域 |
dom | 属性向域的映象集合 |
F | 属性间的数据依赖关系集合 |
关系模式通常可以简记为 R (U) 或 R (A1,A2,…,An )
R 关系名
A1,A2,…,An 属性名
注:A1,A2,…,An为属性名;域名及属性向域的映象常常直接说明为属性的类型、长度。
关系模式:对关系的描述静态的、稳定的
关系:关系模式在某一时刻的状态或内容动态的、随时间不断变化的,关系模式和关系往往统称为关系。两者通过上下文加以区别。
1. 关系数据库
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
2. 关系数据库的型与值
关系数据库也有型和值之分,关系数据库的型称为关系数据库模式,是对关系数据库的描述
若干域的定义,在这些域上定义的若干关系模式,关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库
3 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。
关系模型中三类完整性约束:
实体完整性
参照完整性
用户定义的完整性
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
实体完整性
实体完整性规则(Entity Integrity)
若属性A是基本关系R的主属性,则属性A不能取空值。
关系模型必须遵守实体完整性规则的原因:
(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集或多对多联系。
(2) 现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。
(3) 相应地,关系模型中以主码作为唯一性标识。
(4) 主码中的属性即主属性不能取空值。 空值就是“不知道”或“无意义”的值。
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。
注意 :实体完整性规则规定基本关系的所有,主属性都不能取空值。
参照完整性
1. 关系间的引用
2. 外码
3. 参照完整性规则
关系间的引用
在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用。
2.外码(Foreign Key)
设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码。基本关系R称为参照关系(Referencing Relation)基本关系S称为被参照关系(ReferencedRelation)或目标关系(Target Relation)。
说明
当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
3. 参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
· 或者取空值(F的每个属性值均为空值)
· 或者等于S中某个元组的主码值。
用户定义的完整性
Operation 运算,操作
Operator 算子
Operand 操作数
1.关系代数
一种抽象的查询语言,用对关系的运算来表达查询
2.关系代数运算的三个要素
运算对象:关系
运算结果:关系
运算符:2类(集合运算和关系运行)
关系代数运算符
运算符 | 含义 | |
集合运算符 | ∪ | 并 |
- | 差 | |
∩ | 交 | |
× | 笛卡尔积 | |
专门的关系运算符 | σ | 选择 |
∏ | 投影 | |
连接 | ||
÷ | 除 |
4.关系代数运算的分类
传统的集合运算
并、差、交、广义笛卡尔积
专门的关系运算
选择、投影、连接、除
5.常用的表示记号
(1) R,t∈R,t[Ai]
设关系模式为R(A1,A2,…,An),它的一个关系设为R。t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量 。
(2)
(3)
(4)
①并(Union)关系R与关系S的并记作 R∪S = { t|t∈R∨t ∈S } 仍为n目关系,由属于R或属于S的元组组成
② 差(execpt)关系R与关系S的差记作 R -S = { t|t∈R∧t∉S } 仍为n目关系,由属于R而不属于S的所有元组组成
③交 关系R与关系S的交记作 R∩S = { t|t∈ R∧t ∈S }或者 R∩S = R –(R-S)仍为n目关系,由既属于R又属于S的元组组成
④ 笛卡尔积 广义笛卡尔积(Extended Cartesian Product)
专门的关系运算
1. 选择(Selection)
2. 投影(Projection)
3. 连接(Join)
关于连接的一些概念:
悬浮元祖( dangling tuple ) :两个关系R和S在做自然连接时,关系R中某些元 组有可能在S中不存在公共属性上值相等的元组 ,从而造成R中这些元组在操作时被舍弃了,这 些被舍弃的元组称为悬浮元组。
外连接 (OUTER JOIN)
如果把舍弃的元组也保存在结果关系中,而在其他 属性上填空值(Null),这种连接就叫做外连接。
左外连接(LEFT OUTER JOIN或LEFT JOIN)(留哪边就叫 啥外连接)
如果只把左边关系R中要舍弃的元组保留就叫做左外连接
右外连接
如果只把右边关系S中要舍弃的元组保留就叫做右外连接(RIGHT OUTER JOIN或RIGHT JOIN)。
4. 除(Division)
概念补充:
SQL可以分为数据定义、数据查询、数据更新、数据控制四大部分。
基本表 :
本身独立存在的表,关系表,是实表;
SQL中一个关系就对应一个基本表;
一个(或多个)基本表对应一个存储文件;
一个表可以带若干索引;
存储文件 :
逻辑结构组成了关系数据库的内模式;
物理结构是任意的,对用户透明;
视图:
从一个或几个基本表导出的表;
数据库中只存放视图的定义而不存放视图对应的数据;
视图是一个虚表;
用户可以在视图上再定义视图 (例如,查询语句执行之后的结果);
定义模式
删除模式
常用完整性约束
PRIMARY KEY 可空,可以在一个表里的一个或多个字段定义;PRIMARY KEY 不可空不可重复,在一个表里可以定义联合主键;
简单的说,PRIMARY KEY =UNIQUE + NOT NULL
⑵ 删除属性列
直接/间接删除
直接删除属性列:(新)
例:ALTER TABLE Student Drop Scome;
ALTER TABLE Student MODIFY Sage SMALLINT;
注:修改原有的列定义有可能会破坏已有数据
建立索引
唯一值索引
聚簇索引&非聚簇索引
更新索引
删除索引
查询语句:
①SELECT子句:指定要显示的属性列
②FROM子句:指定查询对象(基本表或视图)
③ WHERE子句:指定查询条件
④ GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
⑤HAVING短语:筛选出只有满足指定条件的组
⑥ORDER BY子句:对查询结果表按指定列值的升序或降序排序
单表查询
查询仅涉及一个表,是一种最简单的查询操作
⑴ 选择表中的若干列
⑵ 选择表中的若干元组
⑶ 对查询结果排序
⑷ 使用集函数
⑸ 对查询结果分组
查询经过计算的值
SELECT子句的<目标列表达式>为表达式
①算术表达式 ②字符串常量 ③函数 ④列别名
二、选择表中的若干元组
WHERE子句常用的查询条件
(1) 比较大小
在WHERE子句的<比较条件>中使用比较运算符
(2) 确定范围
使用谓词 BETWEEN … AND …
NOT BETWEEN … AND …
(3) 确定集合
使用谓词 IN <值表>, NOT IN <值表>
<值表>:用逗号分隔的一组取值
(4) 字符串匹配
<匹配串>:指定匹配模板
匹配模板:固定字符串或含通配符的字符串
当匹配模板为固定字符串时,
可以用 = 运算符取代 LIKE 谓词
用 != 或 < >运算符取代 NOT LIKE 谓词
通配符
% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
_ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
查询DB_Design课程的课程号和学分。
SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design'
ESCAPE '\'
(5) 涉及空值的查询
(6) 多重条件查询
用逻辑运算符AND和 OR来联结多个查询条件
可用来实现多种其他谓词
三、对查询结果排序
使用ORDER BY子句
可以按一个或多个属性列排序: 升序:ASC;降序:DESC;缺省值为升序
当排序列含空值时
四、使用集函数
主要集函数
注:处COUNT(*) 外,都跳过空值只处理非空值。
五、对查询结果分组
使用GROUP BY子句 分组
细化集函数的作用对象
使用HAVING短语筛选最终输出结果
连接查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件或连接谓词
连接操作的执行过程
排序合并法(SORT-MERGE)
索引连接(INDEX-JOIN)
对表2按连接字段建立索引;
对表1中的每个元组,依次根据其连接字段值查询表2的索引,从中找到满足条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组
SQL中连接查询的主要类型
广义笛卡尔积;等值连接(含自然连接); 非等值连接查询;自身连接查询;外连接查询;复合条件连接查询
一、广义笛卡尔积
二、等值与非等值连接查询
等值连接
自然连接
非等值连接查询
连接运算符 不是 = 的连接操作
三、自身连接
2.需要给表起别名以示区别。
3.由于所有属性名都是同名属性,因此必须使用别名前缀。
四、外连接(Outer Join)
外连接与普通连接的区别
① 普通连接操作只输出满足连接条件的元组
② 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
③在表名后面加外连接操作符(*)或(+)指定非主体表
④非主体表有一“万能”的虚行,该行全部由空值组成
⑤虚行可以和主体表中所有不满足连接条件的元组进行连接
⑥由于虚行各列全部是空值,因此与虚行连接的结果中,来自非主体表的属性值全部是空值
注意:
左外连接:外连接符出现在连接条件的左边 右外连接:外连接符出现在连接条件的右边
五、复合条件连接
WHERE子句中含多个连接条件时,称为复合条件连接
2. 不相关子查询
子查询的查询条件不依赖于父查询,是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
3.相关子查询
子查询的查询条件依赖于父查询
①首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;②然后再取外层表的下一个元组;③重复这一过程,直至外层表全部检查完为止。
引出子查询的谓词
⒈带有IN谓词的子查询
⒉带有比较运算符的子查询
⒊带有ANY或ALL谓词的子查询
谓词语义
ANY:任意一个值 ALL:所有值
需要配合使用比较运算符
> ANY | 大于子查询结果中的某个值 |
> ALL | 大于子查询结果中的所有值 |
< ANY | 小于子查询结果中的某个值 |
< ALL | 小于子查询结果中的所有值 |
>= ANY | 大于等于子查询结果中的某个值 |
>= ALL | 大于等于子查询结果中的所有值 |
<= ANY | 小于等于子查询结果中的某个值 |
<= ALL | 小于等于子查询结果中的所有值 |
= ANY | 等于子查询结果中的某个值 |
=ALL | 等于子查询结果中的所有值(通常没有实际意义) |
!=(或<>)ANY | 不等于子查询结果中的某个值 |
!=(或<>)ALL | 不等于子查询结果中的任何一个值 |
⒋带有EXISTS谓词的子查询
3. 不同形式的查询间的替换
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换
所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。
5.用EXISTS/NOT EXISTS实现全称量词(难点)
("x)P ≡ Ø ($ x(Ø P))
6. 用EXISTS/NOT EXISTS实现逻辑蕴函(难点)
p ® q ≡ Ø p∨q
标准SQL直接支持的集合操作种类:并操作(UNION)
一般商用数据库支持的集合操作种类
并操作(UNION)
交操作(INTERSECT)
差操作(MINUS)
1. 并操作
注意:参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同
2. 交操作
标准SQL中没有提供集合交操作,但可用其他方法间接实现。
3. 差操作
4. 对集合操作结果的排序
3.4.1 插入数据
2. 插入子查询结果
三种修改方式
UPDATE SC
SET Grade=0
WHERE 'CS'=
(SELETE Sdept
FROM Student
WHERE Student.Sno = SC.Sno);
SET子句 指定修改方式
要修改的列
修改后取值
WHERE子句 指定要修改的元组
缺省表示要修改表中的所有元组
DBMS在执行修改语句时会检查修改操作
是否破坏表上已定义的完整性规则
DELETE
FROM <表名>
[WHERE <条件>];
DBMS在执行插入语句时会检查所插元组
是否破坏表上已定义的完整性规则
更新数据与数据一致性
DBMS在执行插入、删除、更新语句时必须保证数据库一致性
视图的特点
基于视图的操作
1. 建立视图
DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。组成视图的属性列名全部省略或全部指定。
省略:
由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:
(1) 某个目标列是集函数或列表达式
(2) 目标列为 *
(3) 多表连接时选出了几个同名列作为视图的字段
(4) 需要在视图中为某个列启用新的更合适的名字
WITH CHECK OPTION
透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)带表达式的视图。
定义一个反映学生出生年份的视图。
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2000-Sage
FROM Student
设置一些派生属性列, 也称为虚拟列--Sbirth
带表达式的视图必须明确定义组成视图的各个属性列名
一类不易扩充的视图:以 SELECT * 方式创建的视图可扩充性差,应尽可能避免
2. 删除视图
DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新
更新视图的限制
3.5.4 视图的作用
4.1授权
4.2 收回权限
数据控制亦称为数据保护,包括数据的:
SQL语言的数据控制功能
SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的完全性、完整性,并提供了一定的并发控制及恢复能力。
1. 完整性
CREATE TABLE语句
ALTER TABLE语句
2. 并发控制
3. 恢复
4. 安全性
存取控制:控制用户只能存取他有权存取的数据
规定不同用户对于不同数据对象所允许执行的操作
DBMS实现数据安全性保护的过程
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
(1) 操作权限
对象 | TABLE | 操作权限 |
属性列 | TABLE | SELECT ,INSERT,UPDATE DELECT,ALL PIVIEGES |
视图 | TABLE | SELECT ,INSERT,UPDATE DELECT,ALL PIVIEGES |
基本表 | TABLE | SELECT ,INSERT,UPDATE DELECT ,ALTER ,INDEX,ALL PIVIEGES |
数据库 | DATABASE | CREATETAB |
(2) 用户的权限
一个或多个具体用户
PUBLIC(全体用户)
(3) WITH GRANT OPTION子句
获得某种权限的用户还可以把这种权限再授予别的用户。
2.没有指定WITH GRANT OPTION子句:
获得某种权限的用户只能使用该权限,不能传播该权限
查询Student表权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;
REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;
功能:从指定用户那里收回对指定对象的指定权限
第4章 数据库安全性
数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一
4.1 计算机安全性概论
什么是计算机系统安全性
为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。
技术安全
指计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄露。
管理安全
软硬件意外故障、场地的意外事故、管理不善导致的计算机设备和数据介质的物理破坏、丢失等安全问题
政策法律类
政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令。
安全标准简介
发展历史:
安全标准简介
TCSEC/TDI安全级别划分
R1.1 自主存取控制 (Discretionary Access Control,简记为DAC)
R1.2 客体重用(Object Reuse)
R1.3 标记(Labels)
R1.4 强制存取控制(Mandatory Access Control,简记为MAC)
2.R2 责任(Accountability)
R2.1 标识与鉴别(Identification & Authentication)
R2.2 审计(Audit)
3.R3 保证(Assurance)
R3.1 操作保证(Operational Assurance)
R3.2 生命周期保证(Life Cycle Assurance)
R4 文档(Documentation)
R4.1 安全特性用户指南(Security Features User's Guide)
R4.2 可信设施手册(Trusted Facility Manual)
R4.3 测试文档(Test Documentation)
R4.4 设计文档(Design Documentation)
CC评估保证级划分
数据库安全性控制
用户标识与鉴别
系统提供的最外层安全保护措施
基本方法
存取控制
用户权限定义和合法权检查机制一起组成了DBMS的安全子系统
常用存取控制方法
自主存取控制的特点
强制存取控制的特点
自主存取控制方法
授权与回收
回收:
SQL灵活的授权机制
关系数据库中授权的数据对象粒度
强制存取控制方法
什么是强制存取控制
视图机制
审计
审计的定义
审计功能的可选性:①审计很费时间和空间 ②DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能。
4.2.8 数据加密
美国1977年制定的官方加密标准:数据加密标准(Data Encryption Standard,简称DES)
4.3 统计数据库安全性
规则1:任何查询至少要涉及N(N足够大)个以上的记录
规则2:任意两个查询的相交数据项不能超过M个
规则3:任一用户的查询次数不能超过1+(N-2)/M
第五章 数据库完整性
什么是数据库的完整性
完整性约束条件定义
完整性约束条件作用的对象
1. 静态列级约束
五类静态列级约束
1) 数据类型约束:数据的类型、长度、单位、精度等
2) 对数据格式的约束
3) 取值范围或取值集合的约束
4) 对空值的约束
5) 其他约束
2. 静态元组约束
规定元组的各个列之间的约束关系
静态元组约束只局限在元组上
3. 静态关系约束
关系的各个元组之间或若干关系之间存在的各种联系或约束
常见静态关系约束:
1) 实体完整性约束
2) 参照完整性约束
3) 函数依赖约束
4) 统计约束
4. 动态列级约束
动态列级约束是修改列定义或列值时应满足的约束条件
1) 修改列定义时的约束
2) 修改列值时的约束
5. 动态元组约束
修改元组值: 各个字段之间要满足的约束条件
6. 动态关系约束
关系变化前后状态:限制条件
粒 度 状态 | 列 级 | 元 组 级 | 关 系 级 |
静 态 | 列定义 ·类型 ·格式 ·值域 ·空值 | 元组值应满足的条件 | 实体完整性约束 参照完整性约束 函数依赖约束 统计约束 |
动 态 | 改变列定义或列值 | 元组新旧值之间应满足的约束条件 | 关系新旧状态间应满足的约束条件 |
10.2 完整性控制
一、DBMS的完整性控制机制
1. 定义功能
一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。
2. 检查功能
语句执行完后立即检查是否违背完整性约束
完整性检查延迟到整个事务执行结束后进行
3. 违约反应
拒绝该操作; 其他处理方法
完整性规则五元组表示:
(D,O,A,C,P)
当用户发出什么操作请求时需要检查该完整性规则
是立即检查还是延迟检查;
3.A(Assertion) 数据对象必须满足的断言或语义约束这是规则的主体;
4. C(Condition) 选择A作用的数据对象值的谓词;
5. P(Procedure) 违反完整性规则时触发的过程。
1. 外码是否可以接受空值的问题
2.在被参照关系中删除元组时的问题
出现违约操作的情形:
删除被参照关系的某个元组(student)
而参照关系有若干元组(SC)的外码值与被删除的被参照关系的主码值相同
3.在参照关系中插入元组时的问题
4. 修改被参照关系中主码的问题
(1)不允许修改主码
(2)允许修改主码
第六章 关系数据理论
二、关系模式的形式化定义
关系模式由五部分组成,即它是一个五元组:
R(U, D, DOM, F)
R: 关系名
U: 组成该关系的属性名集合
D: 属性组U中属性所来自的域
DOM:属性向域的映象集合
F: 属性间数据的依赖关系集合
三、什么是数据依赖
1. 完整性约束的表现形式
2. 数据依赖
3. 数据依赖的类型
四、关系模式的简化表示
简化为一个三元组:
R(U, F)
五、数据依赖对关系模式的影响
⒈ 数据冗余太大
浪费大量的存储空间
例:每一个系主任的姓名重复出现
⒉ 更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大。
例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组
⒊ 插入异常(Insertion Anomalies)
该插的数据插不进去
例,如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。
⒋ 删除异常(Deletion Anomalies)
不该删除的数据不得不删
原因:由存在于模式中的某些数据依赖引起的
解决方法:通过分解关系模式来消除其中不合适的数据依赖。
6.2 规范化
一、函数依赖
R的所有关系实例均要满足:
1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。
例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立,若有同名,则年龄不依赖于姓名。
3. 数据库设计者可以对现实世界作强制的规定。
二、平凡函数依赖与非平凡函数依赖
在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno
(Sno, Cno) → Cno
三、完全函数依赖与部分函数依赖
四、传递函数依赖
码
外码:
6.2.3 范式
范式是符合某一种级别的关系模式的集合 ;关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式;某一关系模式R为第n范式,可简记为R∈nNF。
1NF的定义
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
注意:第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
(1) 插入异常
(2) 删除异常
(3) 数据冗余度大
(4) 修改复杂
2NF的定义
定义5.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
3NF的定义
5.2.6 BC范式(BCNF)
若R∈BCNF
5.2.5 多值依赖与第四范式(4NF)
定义6.10 第四范式
多值依赖
多值依赖的性质
多值依赖与函数依赖区别
7.1.1 数据库和信息系统
7.1.2 数据库设计的特点
2.数据库设计应该与应用系统设计相结合
3. 结构和行为分离的设计
数据库设计的基本步骤
⒈需求分析阶段
⒉概念结构设计阶段
⒊逻辑结构设计阶段
⒋数据库物理设计阶段
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)
⒌数据库实施阶段
⒍数据库运行和维护阶段
1. 需求分析阶段
2.概念设计阶段
3.逻辑设计阶段
4.物理设计阶段
5.数据库实施阶段
6.运行和维护阶段
数据库设计不同阶段形成的数据库各级模式
特点:
然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式。首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式需。求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。
一、数据字典的用途
数据字典是关于数据库中数据的描述,即元数据, 不是数据本身,是数据的数据 ; 数据字典在需求分析阶段建立,在数据库设计过程 中不断修改、充实、完善;数据字典是进行详细的数据收集和数据分析所获得 的主要结果。
二、数据字典的内容
⒈ 数据项
数据项是不可再分的数据单位
对数据项的描述 数据项描述={ 数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系 }
用关系规范化理论为指导,用数据依赖的概念分析和表示 数据项之间的联系 —函数依赖
“取值范围” 、 “与其他数据项的逻辑关系”。
定义了数据的完整性约束条件,是设计数据检验功能的依据,包括模式设计、完整性检查条件、触发器,存储过程。
⒉ 数据结构
数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
⒊ 数据流
⒋ 数据存储
⒌ 处理过程
6.3 概念结构设计
7.3.2 概念结构设计的方法与步骤
7.3.3 数据抽象与局部视图设计
一、数据抽象
2. 三种常用抽象
1. 分类(Classification)
定义某一类概念作为现实世界中一组对象的类型;
这些对象具有某些共同的特性和行为;
它抽象了对象值和型之间的“is member of”的语义;
在E-R模型中,实体型就是这种抽象;
2. 聚集(Aggregation)
定义某一类型的组成成分;
它抽象了对象内部类型和成分之间“is part of”的语义;
在E-R模型中若干属性的聚集组成了实体型,就是这种抽象
3. 概括(Generalization)
定义类型之间的一种子集联系;
它抽象了类型之间的“is subset of”的语义;
概括有一个很重要的性质:继承性。子类继承超类上定义的所有抽象。
设计分E-R图的步骤:
⒈选择局部应用
⒉逐一设计分E-R图
(1)合并
① 属性冲突
② 命名冲突
同名异义:不同意义的对象在不同的局部应用中具有相同的名字
异名同义(一义多名):同一意义的对象在不同的局部应用中具有不同的名字
③ 结构冲突
同一对象在不同应用中具有不同的抽象
同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同。
实体之间的联系在不同局部视图中呈现不同的类型
(2)修改与重构
①概念结构设计的步骤:
抽象数据并设计局部视图;集成局部视图,得到全局概念结构;验证整体概念结构
②设计局部视图:
选择局部应用;
逐一设计分E-R图:标定局部应用中的实体、属性、码,实体间的联系;用E-R图描述出来
③集成局部视图:合并分E-R图,生成初步E-R图(消除冲突):属性冲突、命名冲突、结构冲突;
修改与重构(消除不必要的冗余,设计生成基本E-R图):分析方法、规范化理论
6.4 逻辑结构设计
① 一个实体型转换为一个关系模式。
② 一个m:n联系转换为一个关系模式。
③ 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
转换为一个独立的关系模式:
与n端对应的关系模式合并
④ 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
转换为一个独立的关系模式
与某一端对应的关系模式合并
⑤ 三个或三个以上实体间的一个多元联系转换为一个关系模式。
⑥ 同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。
⑦ 具有相同码的关系模式可合并。
7.4.2 向特定DBMS规定的模型进行转换
7.4.3 数据模型的优化
数据模型的优化
⒈ 确定数据依赖
⒉ 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
⒊ 按照数据依赖的理论对关系模式逐一进行分析,考查是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
⒋ 按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
⒌ 按照需求分析阶段得到的各种应用对数据处理的要求,对关系模式进行必要的分解或合并,以提高数据操作的效率和存储空间的利用率
水平分解
垂直分解
E-R图向关系模型的转换原则
⒈ 一个实体型转换为一个关系模式。
⒉ 一个m:n联系转换为一个关系模式。
⒊ 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。
⒋ 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
⒌ 三个或三个以上实体间的一个多元联系转换为一个关系模式。
⒍ 同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。
⒎ 具有相同码的关系模式可合并。
优化数据模型的方法
⒈ 确定数据依赖
⒉ 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
⒊ 确定各关系模式分别属于第几范式。
⒋ 分析对于应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
⒌ 对关系模式进行必要的分解或合并
7.5 数据库的物理设计
定义: 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统,为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计。
关系模式存取方法选择
一、索引存取方法的选择
根据应用要求确定
7.6 数据库的实施
一、定义数据库结构
二、数据装载
嵌 入 式 SQL:高级程序语言中嵌入SQL
EXEC SQL
DBMS处理宿主型数据库语言SQL 的方法
预编译
1.由DBMS的预处理程序对源程序进行扫描,识别出SQL语句
2.把它们转换成主语言调用语句,以使主语言编译程序能识别它
3.最后由主语言的编译程序将整个源程序编译成目标码。
嵌入SQL语句
说明性语句
嵌入SQL语句 数据定义
可执行语句 数据控制
数据操纵
将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句
工作单元之间的通信方式
1. SQL通信区
向主语言传递SQL语句的执行状态信息
主语言能够据此控制程序流程
2. 主变量
1)主语言向SQL语句提供参数
2)将SQL语句查询数据库的结果交主语言进一步处理
3. 游标
解决集合性操作语言与过程性操作语言的不匹配
1. 说明游标
EXEC SQL DECLARE <游标名> CURSOR
FOR
功能:是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。
2. 打开游标
EXEC SQL OPEN <游标名>;
3. 移动游标指针,然后取当前记录
EXEC SQL FETCH [[NEXT|PRIOR|
FIRST|LAST] FROM] <游标名>
INTO <主变量>[<指示变量>]
[,<主变量>[<指示变量>]]...;
4. 关闭游标
EXEC SQL CLOSE <游标名>;
第八章 数据库恢复技术
7.1 事务的基本概念
一、什么是事务
二、如何定义事务
BEGIN TRANSACTION BEGIN TRANSACTION
SQL 语句1 SQL 语句1
SQL 语句2 SQL 语句2
。。。。。 。。。。。
COMMIT ROLLBACK
当用户没有显式地定义事务时,
DBMS按缺省规定自动划分事务
事务结束
COMMIT
事务正常结束
提交事务的所有操作(读+更新)
事务中所有对数据库的更新永久生效
ROLLBACK
事务异常终止
回滚事务的所有更新操作
三、事务的特性(ACID特性)
事务的ACID特性:
1. 原子性
2. 一致性
事务执行的结果必须是使数据库从一个
一致性状态变到另一个一致性状态
一致性状态:
数据库中只包含成功事务提交的结果
不一致状态:
数据库中包含失败事务的结果
3. 隔离性
对并发执行而言
一个事务的执行不能被其他事务干扰
4. 持续性
事务的特性
系统故障的恢复
恢复机制涉及的关键问题
1. 如何建立冗余数据
2. 如何利用这些冗余数据实施数据库恢复
1.静态转储
动态转储
7.4.2 登记日志文件
一、日志文件的内容
1. 什么是日志文件
日志文件(log)是用来记录事务对数据库的
更新操作的文件
2. 日志文件的格式
以记录为单位的日志文件
以数据块为单位的日志文件
3. 日志文件内容
日志文件中的一个日志记录 (log record)
4. 基于记录的日志文件
每条日志记录的内容
5. 基于数据块的日志文件
每条日志记录的内容
一个数据库管理系统可定义为关系系统,当且仅当它至少支持:
1. 关系数据库(即关系数据结构)
系统中只有表这种结构
2. 支持选择、投影和(自然)连接运算
对这些运算不要求用户定义任何物理存取路径
对关系系统的最低要求
6.2.1 查询优化概述
(1) 优化器可以从数据字典中获取许多统计信息,而用户程序则难以获得这些信息
(2)如果数据库的物理统计信息改变了,系统可以自动对查询重新优化以选择相适应的执行计划。
在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。
(3)优化器可以考虑数百种不同的执行计划,而程序员一般只能考虑有限的几种可能性。
(4)优化器中包括了很多复杂的优化技术
选择有效策略,求得给定关系表达式的值
1. 将查询转换成某种内部表示,通常是语法树
2. 根据一定的等价变换规则把语法树转换成标准
(优化)形式
3. 选择低层的操作算法
对于语法树中的每一个操作
4. 生成查询计划(查询执行方案)
查询计划是由一系列内部操作组成的。
6.2.4 关系代数等价变换规则
6.2.6 优化的一般步骤
1.把查询转换成某种内部表示
2.代数优化:把语法树转换成标准(优化)形式
3.物理优化:选择低层的存取路径
4.生成查询计划,选择代价最小的
第十章 并发控制
并发操作带来的数据不一致性
1. 丢失修改
丢失修改是指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。
2. 不可重复读
不可重复读是指事务1读取数据后,事务2
执行更新操作,使事务1无法再现前一次读
取结果。
事务1读取某一数据后:
1.事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。
2. 事务2删除了其中部分记录,当事务1再次读取数据时,发现某些记录神密地消失了。
3. 事务2插入了一些记录,当事务1再次按相同条件读取数据时,发现多了一些记录。
后两种不可重复读有时也称为幻影现象(phantom row)
3. 读“脏”数据
事务1修改某一数据,并将其写回磁盘,事务2读取同一数据后,事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值,事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。
8.2 封锁
一、什么是封锁
二、基本封锁类型
排它锁(eXclusive lock,简记为X锁)
共享锁(Share lock,简记为S锁)
8.3 封锁协议
1级封锁协议
一级封锁协议 vs 不可重读
2级封锁协议
二级封锁协议 vs 不可重读
3级封锁协议
总结
8.4 活锁和死锁
活锁
定义:事务𝑻𝟏封锁了数据R 事务𝑻𝟐又请求封锁R,于是𝑻𝟐等待。 也请求封锁R,当𝑻𝟏释放了R上的封锁之后系统首先批准 了𝑻𝟑的请求, 𝑻𝟐仍然等待。 又请求封锁R,当𝑻𝟑释放了R上的封锁之后系统又批准了 𝑻𝟒的请求…… 有可能永远等待,这就是活锁的情形
避免活锁:采用先来先服务的策略, 当多个事务请求封锁同一数据对象时 ,按请求封锁的先后次序对这些事务排队, 该数据对象上的锁一旦释放,首先批准申请队列中第一 个事务获得锁。
死锁
定义
事务𝑻𝟏封锁了数据𝑹𝟏,封锁了数据𝑹𝟐,又请求封锁𝑹𝟐 ,因𝑻𝟐已封锁了𝑹𝟐 ,于是𝑻𝟏等待𝑻𝟐释放 𝑹𝟐上的锁 , 接着𝑻𝟐又申请封锁𝑹𝟏 ,因𝑻𝟏已封锁了𝑹𝟏 , 𝑻𝟐也只能等待 𝑻𝟏释放𝑹𝟏上的锁 , 这样𝑻𝟏在等待𝑻𝟐 ,而𝑻𝟐又在等待𝑻𝟏 , 𝑻𝟏和𝑻𝟐两个事务永 远不能结束,形成死锁
死锁的预防
(1)一次封锁法
(2)顺序封锁法
2. 死锁的诊断与解除
检测死锁:超时法
等待图法
8.5 并发调度的可串行性
可串行性是并行事务正确性的唯一准则
8.6 两段锁协议
Ⅰ 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
Ⅱ 在释放一个封锁之后,事务不再获得任何其他封锁。
并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。
两段锁协议与三级封锁协议
遵守第三级封锁协议必然遵守两段协议
8.7 封锁的粒度
一、什么是封锁粒度
二、选择封锁粒度的原则
封锁粒度与系统的并发度和并发控制的开销密切相关;封锁的粒度越大,数据库所能够封锁的数据单元就越 少,并发度就越小,系统开销也越小;但并发度低 , 封锁的粒度越小,并发度较高,但系统开销也就越大。
对系统开销与并发度进行权衡
8.7.2 多粒度封锁
显式封锁和隐式封锁
8.7.3 意向锁
Is意向锁
意向排它锁
共享意向排它锁:
补充: