一 数据库基础知识(第1、2章)
一、有关概念
1.数据
2.数据库(DB)
3.数据库管理系统(DBMS)
Access
桌面DBMS VFP
SQL Server
Oracle
客户机/服务器型DBMS MySQL
DB2
4.数据库系统(DBS)
数据库(DB)
数据库管理系统(DBMS)
开发工具
应用系统
二、数据管理技术的发展
1.数据管理的三个阶段
人工管理 | 文件系统 | 数据库系统 | |
数据能否保存 | 不能保存 | 可以保存 | 可以保存 |
数据面向的对象 | 某一应用程序 | 某一应用程序 | 整个应用系统 |
数据的共享程度 | 无共享,一组 数据只能对应一个应用程序。 | 共享性差,一个数据文件只能对应一个应用程序。 | 共享性高 |
数据的独立性 | 不独立,它是应用程序的一部分。 | 独立性差 | 数据库与应用系统完全分开 |
概念模型
一、模型的三个世界
1.现实世界
2.信息世界:即根据需求分析画概念模型(即E-R图),E-R图与DBMS无关。
3.机器世界:将E-R图转换为某一种数据模型,数据模型与DBMS相关。
注意:信息世界又称概念模型,机器世界又称数据模型
二、实体及属性
1.实体:客观存在并可相互区别的事物。
2.属性:
3.关键词(码、key):能唯一标识每个实体又不含多余属性的属性组合。
一个表的码可以有多个,但主码只能有一个。
例:借书表(学号,姓名,书号,书名,作者,定价,借期,还期)
规定:学生一次可以借多本书,同一种书只能借一本,但可以多次续借。
4.实体型:即二维表的结构
例 student(no,name,sex,age,dept)
5.实体集:即整个二维表
三、实体间的*
1.两实体集间实体之间的联系
1:1联系
1:n联系
m:n联系
2.同一实体集内实体之间的联系
1:1联系
1:n联系
m:n联系
四、概念模型(常用E-R图表示)
实体型:
属性:
*
说明:① E-R图作为用户与开发人员的中间语言。
② E-R图可以等价转换为层次、网状、关系模型。
举例:
学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授
和副教授每人各带若干研究生。每个班有若干学生,每个学生选修若干课程,每门课程有若干学生选修。用E-R图画出概念模型。
数据模型
一、层次模型:用树型结构表示实体之间的联系。
① 每个结点代表一个实体型。
② 只能直接处理一对多(含一对一)的实体关系。
③ 查找层次数据库中的记录,速度较慢。
二、网状模型:用图结构表示实体之间的联系。
① 每个结点代表一个实体型。
② 可以处理多对多的实体关系。
③ 查找网状数据库中的记录,速度最快。
三、关系模型:用二维表表示实体之间的联系。
1.重要术语:
关系:一个关系就是一个二维表;
元组:二维表的一行,即实体;
关系模式:在实体型的基础上,注明主码。
关系模型:指一个数据库中全部二维表结构的集合。
2.特点:
① 关系模型是建立在严格的数学理论的基础上的;
② 关系模型的存取路径对用户透明;
③ 查找关系数据库中的记录,速度最慢。
小结:数据有三种类型,DBMS就有三种类型,DB亦有三种类型。
数据库系统结构
一、数据库系统的体系结构
① 单机结构:
DBMS、数据库、开发工具、应用系统安装在一台计算机上。
② C/S结构:局域网结构
客户机:装开发工具、应用系统
服务器:装DBMS、数据库
③ B/S结构:Internet 结构
服务器:装DBMS、数据库、开发工具、应用系统
客户机:装IE即可
三、 数据库系统的模式结构
1.三级模式
① 模式:是数据库中全体数据的逻辑结构和特征的描述。
Ü 模式只涉及数据库的结构;
Ü 模式既不涉及应用程序,又不涉及数据库结构的存储;
② 外模式:是模式的一个子集,是与某一个应用程序有关的逻辑表示。
特点:一个应用程序只能使用一个外模式,但同一个外模式可为多个应用程序使用。
③ 内模式:描述数据库结构的存储,但不涉及物理记录。
2.两级映象
① 外模式/模式映象:保证数据库的逻辑独立性;
② 模式/内模式映象:保证数据库的物理独立性;
3.两级映象的意义
① 使数据库与应用系统完全分开,数据库改变时,应用系统不必改变。
② 数据的存取完全由DBMS管理,用户不必考虑存取路径。
数据库管理系统
1. DBMS的功能:负责对数据库进行统一的管理与控制。
① 数据定义:即定义数据库中各对象的结构
② 数据操纵:包括对数据库进行查询、插入、删除、修改等操作。
③ 数据控制:包括安全性控制、完整性控制、并发控制、数据库恢复。
2.DBMS的组成:
DDL语言
DML语言
DCL语言
实用程序
注意:
① SQL集DDL,DML,DCL功能于一体;
② 所有应用程序通过SQL语句才能访问数据库
一、 基本概念
1.码:能唯一标识元组的属性集。
2.候选码:一个属性集既能唯一标识元组,且又不含有多余属性,一个关系模式可以有多个候选码。
3.主码:任选候选码中的一个。
4.主属性:主码中包含的各个属性。
5.非主属性:不包含在主码中的各个属性。
6.外码:设F是关系R的一个属性,不是R的主码,但却是另一个关系S的主码,则称F是关系R的外码。
例:student ( sno, sname, ssex, sage, sdept)
Sc ( sno, cno, grade)
Sc的主码为:(sno,cno);外码为:sno
二 数据库设计 (第3章)
一、数据库设计的步骤
① 需求分析:了解分析用户的需要、要求。
② 概念结构设计:根据需求分析的结果画概念模型(即E-R图)。
③ 逻辑结构设计:将E-R图转换为某一种数据模型,并优化。
④ 物理结构设计
⑤ 数据库实施
⑥ 数据库运行与恢复
概念结构设计
一、局部E-R图设计
1.确定局部范围
通常把系统涉及的各个部门或各个主要功能作为局部。
2.确定实体与属性
① 属性是不能再分的数据项;
② 联系只发生在两实体之间;
③ 原则上,能够作为属性,就不要作为实体。
二、合并成总体E-R图
1.消除各局部E-R图的冲突问题。
2.按公共实体名合并,生成初步E-R图。
3.消除冗余的属性和冗余的联系,生成总体E-R图。
逻辑结构设计
一、联系的属性和主码
(1)联系的属性:必须包含相关联的各实体型的主码。
(2)联系的主码
1:1*可以是相关联的任一实体型的主码。
1:n*必须是n方实体型的主码。
m:n*必须是相关联的各实体型的主码之和。
二、E-R图向关系模型的转换
(1)把每个实体型转换为一个关系模式。
(2)1:1*可以消化到相关联的任一实体型对应的关系模式中。
班长( XH, XM, NL,BH)
班级(BH,RS)
(3)1:n*可以消化到n方实体名对应的关系模式中。
例:一个班级有多名学生,每名学生只能属于一个班级。每一个班级有一名班长,他是学生中的一员。
学生(XH,XM,NL,BH)
班级(BH,RS,XH)
班长的学号
(4)m:n*必须转换为一个关系模式,并且不能消化。
例:
学生(sno,sname, ssex, sage, sdept)
课程(cno, cname,credit)
选修(sno, cno, grade)
(5)多元*不能消化
例:
物理结构设计与数据库实施
1.物理结构设计
在逻辑设计的基础上,为每个关系模式选择合适的存储结构与存储方式。
选择存储结构:即决定每个表的记录顺序。
选择存取方式:即决定为哪些属性建立非聚集索引,以便加快查找速度。一般把经常查询的属性名指定为非聚集索引。
2.数据库实施
主要工作:
定义数据库结构;
组织数据入库;
编写应用程序;
数据库试运行;
三 关系数据库 (第4章)
一、域( domain)
1.定义:域是一组具有相同类型的值的集合。
2.域的基数:域中所含数据的个数。
二、笛卡尔积
1.定义:给定一组域d1,D2,D3,则D1×D2×D3称为笛卡尔积。
2.笛卡尔积D1×D2×D3对应一个二维表,所含元组的个数等于各个域的基数之积。
三、关系
1.定义:笛卡儿积的一部分元组称为关系。
2.关系的目(或度):一个关系所含属性的个数。
3.关系的性质
任意两个元组不能完全相同,同一关系的属性名不允许重复。
四、关系的完整性
1.实体完整性:指关系的所有主属性都不能取空值。
注意:实体完整性不仅仅是主码整体不能取空值。
2.参照完整性:指一个关系外码的取值必须是相关关系中主码的有效值或空值。
例:班级( 班名,人数)
学生(学号,姓名,性别,密码,班名)
在学生表中,班名的取值必须是班级表[班名]的值或空值。
关系代数
一、传统的集合运算
设关系R、S的结构完全相同,则:
R∪S:由属于R或属于S的元组组成。
R∩S:由既属于R又属于S的元组组成。
R-S:由属于R而不属于S的元组组成。
思考:(R∩S)∪(R-S)=?
R×S:设R有m个属性,K1个元组;S有n个属性,K2个元组,则R×S含有(m n)个属性,(K1×K2)个元组。
二、专门的关系运算
1.选择:从关系R中选择满足条件的元组。记为:
2.投影:从关系R中选择若干属性组成新的关系,并把新关系的重复元组去掉。
记为:
3.条件连接:将两关系按一定条件连接成一个新关系,记为:
说明:条件连接:两关系可以没有公共属性,若有公共属性,则新关系含有重复属性。
4.自然连接:将两关系按公共属性连接成一个新的关系,并把新关系的重复属性去掉。
记为:
说明:① 自然连接:两关系至少有一个公共属性。
② 对于R的每个元组,S都从第一个元组开始判断,若两元组的公共属性值相同,则产生一个新元组添加到新关系中,最后把新关系中的重复属性去掉。
等值连接?
5.除:给定关系R(x,y)和S(y,z),则R÷S=P(x),其中x,y,z为属性组。
求解过程:
① 求R中x可以取哪些值,并求各值的象集。
② 求S在属性组y上的投影K。
③ 检查每个象集是否包含K
注:除不是一个必须的运算,可以由其它运算符代替。
例:设有关系R,S如下图,求R÷S。
R | A | B | C | S | B | C | D |
a1 | b1 | c2 | b1 | c2 | d1 | ||
a2 | b3 | c7 | b2 | c1 | d1 | ||
a3 | b4 | c6 | b2 | c3 | d2 | ||
a1 | b2 | c3 | |||||
a4 | b6 | c6 | |||||
a2 | b2 | c3 | |||||
a1 | b2 | c1 |
解:在关系R中,A可以取四个值,a1,a2,a3,a4。
a1的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2的象集为{(b3,c7),(b2,c3)}
a3的象集为{(b4,c6)}
a4的象集为{(b6,c6)}
S在(B,C)上的投影K为{(b1,c2),(b2,c3),(b2,c1)}
显然只有a1的象集包含K,故R÷S={a1}
结论:如何写关系代数表达式?
答:① 查询涉及多个关系时,一般使用∞→
。
② 查询涉及“否定”时,一般用差运算。
③ 查询涉及“全部”时,一般用除运算。
④ 查询涉及“至少”时,一般用×
四 关系数据库标准语言SQL (第5章)
T-SQL
一、SQL语言的特点
①SQL语言集数据定义、数据查询、数据操纵、数据控制的功能于一体。
动词 | |
数据定义 | Create、drop |
数据查询 | select |
数据操纵 | Insert、delete、update |
数据控制 | Grant、revoke |
②所有的DBMS都支持SQL语言。
SQL基础
一、创建和使用数据库
1.创建数据库
create database 数据库名
2.使用数据库
Use数据库名
3.删除数据库
drop database数据库名
二、 定义表
1.创建表
create table 表名(属性名 类型,…,属性名 类型)
①指定标识字段:identity(标识种子,标识增量)
②指定公式字段:属性名 as 表达式
例:create table student
(no int identity(1,1),
name char(6),
chi smallint,
mat smallint,
score as chi mat)
2.删除表
drop table表名,…, 表名
三、select语句
select */表达式表
[into 新表]
from 表名,…,表名
[where 条件]
[group by 属性名]
[having 条件]
[order by属性名][Asc/Desc]
1.Select 子句
① *代表所有属性名
② 若一个属性名来自多个表,则属性名前须冠以表名,格式为:表名. 属性名
③ 设置表达式的别名:
表达式 As 别名
④ 限制查询结果的记录行数:
all 返回全部记录
top n 返回前面n号记录
distinct 表示取消重复行
说明:top n只能放在关键字select的后面;
all、distinct只能放在关键字select或聚合函数的后面。
2.Where 子句
① in的格式:属性名 in (常量,…,常量)
② like的格式:属性名 like 通配字符串
通配符有: % 表示0个或多个字符
- 表示1个字符
③ 在Where 子句中指定连接:
Where 表名1. 属性名=表名2. 属性名
3.order by子句
order by属性名1 [Asc/Desc], 属性名2 [Asc/Desc]
4.聚合函数
① sum(属性名):纵向求数值型属性之和。
② avg(属性名)
③ count(*) 返回表的记录行数(含重复行)。
count(属性名) 返回指定列中取非NULL值的单元格数目。
count(distinct 属性名) 返回指定列中取非NULL值、非重复的单元格数目。
④ max(属性名)
⑤ min(属性名)
5.Group by子句
使用Group by子句时,Select 子句只能使用分组项字段和聚合函数
例:以性别为分组项,求每一组的平均年龄。
Select ssex, avg(sage) as 平均年龄
From student
Group by ssex
6.Having子句
① Having子句只能跟在Group by子句之后,且只能使用聚合函数和分组项字段。
② where子句放在Group by子句之前,甚至可以没有Group by子句;且不能包含聚合函数。
例:以系别为分组项,查询学生平均年龄大于19岁的系的系名,平均年龄。
Select sdept,avg(sage) as平均年龄
From student
Group by sdept
Having avg(sdept)>19
7.into子句
功能:将查询结果保存到新的基表中。
一、 查询的分类
单表查询
连接查询
嵌套查询
1.连接查询:在where子句中指定连接
where 表名1.属性名=表名2.属性名
2.嵌套查询
① 嵌套查询的特点
·每级查询的from子句一般只包含一个表名。
·一个嵌套查询总可以分解为若干个单表查询,总可以改写成连接查询。
·若查询结果显示的属性名来自一个表,才可以写成嵌套查询。
·子查询不能使用order by子句,order by只能用于最顶层的查询。
② 在where子句中指定子查询
where 属性名 [not] in(子查询):子查询返回一列多行。
where 属性名=(子查询):子查询返回一列一行。
where [not] exists(子查询):子查询返回多列多行。
五、数据操纵
1.insert语句
(1)每次插入一条记录
insert into 表名[(属性名表)] values(表达式表)
(2)插入子查询的结果
insert into 表名[(属性名表)]
子查询
例:insert into student
select * from student1
2.update语句
update 表名 set 属性名=值,…,属性名=值 [where 条件]
缺省where子句,默认为更新全部记录。
3.delete语句
delete from 表名 [where 条件]
五 关系数据库规范化理论(第7章)
函数依赖
一、有关概念:
1.函数依赖:
任给R(U),U为属性集,x、y为U的子集,如果对于x的每个值,y有唯一确定的值与之对应,则称x决定y,或y函数依赖于x。记为:x→y。
2. 完全函数依赖:
若x→y,且对于x的所有真子集x′,都有x′ y,则称x完全决定y,或y完全函数依赖于x。记为:
。
结论:若x→y,且x只包含一个属性,则
。
3.部分函数依赖:
若x→y,且存在x的一个真子集x′,满足x′→y,则称x部分决定y,或y部分函数依赖于x。记为:
。
4.传递函数依赖:
若x→y,y→z,但 y ∕ x,则
二、平凡函数依赖与非平凡函数依赖
设x→y,如果y是x的子集,则该依赖是平凡的。如:
Sno,sname→sno
如果y中至少有一个属性不在x中,则该依赖是非平凡的。如:
Sno,sname→sname,sdept
如果y中没有一个属性在x中,则该依赖为完全非平凡的。
三、函数依赖的推理规则
设有关系R,x、y、z为R的一个属性集,则有:
①自反律:若
,则x→y。
②增广律:若x→y,则xz→yz。
③传递律:若x→y,y→z,则x→z。
注意传递律与传递函数依赖的区别。
④合并律:若x→y,x→z,则x→yz。
⑤分解律:若x→yz,则x→y,x→z。
关系模式的规范化
一、问题提出
R表
XH | KH | KM | XM | DZ | CJ |
961 | C1 | OS | 高明 | D1 | 70 |
962 | C2 | DBS | 高飞 | D2 | 72 |
962 | C4 | AI | 高飞 | D2 | 80 |
962 | C1 | OS | 高明 | D1 | 75 |
963 | C1 | OS | 高明 | D1 | 90 |
答:存在问题
① 数据冗余大;
② 修改麻烦;
③ 插入异常:应该插入到DB中的数据插不进去。
如:新开课程没有学生选修时,新开课程的课程号、课程名插不进去。
④ 删除异常:不应该删除的数据被删掉。
如选修某门课的学生毕业了,在删除学生信息的同时,把课程信息也删除掉。
结论:一个好的关系模式应满足:
① 冗余应尽可能少;
② 应尽可能避免插入、删除异常;
③ 消去关系中不合适的属性依赖关系。
二、范式
① 什么叫范式?
指一个关系的非主属性函数依赖于主码的程度。
② 什么叫关系规范化?
指一个关系从低级范式向高级范式的转换过程。
③ 应用:关系规范化理论应用在逻辑结构设计阶段。
三、关系模式的规范化
1.第一范式(1NF)
① 定义:若关系R的所有属性不能再分,则R∈1NF
2.第二范式(2NF)
① 定义:若关系R∈1NF,且它的每个非主属性都完全依赖于主码,则称R∈2NF。
② 存在问题:
l 冗余大: R1必要冗余,R2冗余可以修改。
l 修改麻烦
l 插入异常:如新来的教师没有上课,则该教师的信息就没办法插入R2表中。
l 删除异常:若某位教师只授一门课,当该门课不开时,该教师的信息亦被删除。
③ 原因:存在非主属性对主码的传递依赖。
KH→XM,XM→DZ,但XM KH
∴
[传递依赖必须有两个非主属性]
④ 解决办法:将R2 一分为二
R21表 R22表
KH | KM | XM | XM | DZ | |
C1 | OS | 高明 | 高明 | D1 | |
C2 | DBS | 高飞 | 高飞 | D2 | |
C4 | AI | 高飞 |
R21主码:KH
R22主码:XM
3.第三范式(3NF)
① 定义:若关系R∈2NF,且它的每个非主属性都不传递依赖于主码,则称R∈3NF。
② 规范化过程
非规范关系
↓使每个属性都不能再分
1NF
↓消去非主属性对主码的部分依赖
2NF
↓消去非主属性对主码的传递依赖
3NF
BCNF:关系模式R<U,F>中,如每一个决定因素都包含码,则R是BC范式。
如果R属于BCNF 那么R一定属于3NF,反之未必。
3NF
↓消去主属性对主码的部分依赖和传递依赖
BCNF
4.结论
① 若R∈1NF,且主码只含一个属性,则R一定为2NF。
② 若R∈2NF,且只有0~1个非主属性,则R一定为3NF。
③ 3NF一般控制了数据冗余,一般避免了操作异常。
④ 范式并非越高越好,适可而止。
六 数据库保护技术(第8章)
安全管理
一、两种身份验证模式:
仅windows模式:用户只能使用windows登录名登录SQL Server
混合模式:用户可以使用windows登录名或SQL Server登录名登录SQL Server
二、两种身份验证:
用户登录到SQL Server时,必须使用特定的登录名和密码标识自己。
Windows身份验证:用户登录到SQL Server时,使用操作系统当前的登录名和密码。
SQL Server身份验证:用户登录到SQL Server时,必须显式提供登录名和密码。
常用安全性控制方法:用户标识和控制、存取控制、视图、审计、数据加密
数据库完整性
一、在创建表时指定约束
1.主键约束
[constraint约束名]
Primary key [Clustered/Nonclustered] [(属性名,…,属性名)]
说明:
① 每个约束都有一个约束名,约束名通常由系统自动给出。
② 列级约束:只牵涉到一个属性的约束,它放在相关属性的后面,且省略属性名表。
表级约束:牵涉到多个属性的约束。
③ 创建主键约束、唯一性约束时可以指定聚集(clustered)或非聚集(nonclustered)。
④ 主键约束默认为聚集的,唯一性约束默认为非聚集的。
⑤ 一个表最多只能创建一个约束是聚集的,聚集约束会影响数据表的记录号顺序。
2.外键约束
[constraint约束名]
Foreign key[(属性名,…,属性名)]
References 主键表名(属性名,…,属性名)
注意:两表关联的方式:
①临时关联:where 表名1.属性名=表名2.属性名
②永久关联:创建外键约束
3.唯一性约束
[constraint约束名]
Unique [Clustered/Nonclustered] [(属性名,…,属性名)]
主键约束与唯一约束的区别:
① 在一个表中只能定义一个主键约束,但可定义多个唯一性约束;
② 指定为主键约束的字段不能取null值,但指定为唯一性约束的字段允许取null值。
4.检查约束
[constraint约束名]
Check (条件表达式)
5. 缺省约束
[constraint约束名]
Default 常量
二、删除表中的约束
alter table 表名
drop constraint 约束名,...,约束名
注意:alter语句后面只能跟着一个子句。
三、向表添加约束
alter table 表名
add constraint 约束名 约束定义,...,
constraint 约束名 约束定义
约束定义指:
Primary key [Clustered/Nonclustered] (属性组)
Foreign key(属性组) references 主键表名(属性组)
Unique [Clustered/Nonclustered] (属性组)
Check(条件表达式)
Default 常量 for 属性名
默认对象
①默认对象与默认约束的功能类似。
②默认对象以单独的对象创建,可以绑定到数据库的所有表中。
③默认约束只能绑定到一个表中。
规则
①规则与check约束的功能类似。
① 则以单独的对象创建,可以绑定到数据库的所有表中。
② check约束只能绑定到一个表中。
索引
一、索引的概念:
①索引使用户能快速访问数据表的特定信息。
② 索引必须依附于某个基本表,不能单独存在。
二、索引的类型:
聚集索引:影响数据表的记录顺序
非聚集索引:不会影响数据表的记录顺序
注:一个表只能建立一个聚集索引,但可以建立若干个非聚集索引。
三、创建索引
1.自动创建索引:
。如果在数据表的某个属性设置主键约束或唯一约束,则系统将在这些属性上自动创建唯一索引。
。自动创建的索引随约束的存在而存在,随约束的消失而消失。
2.使用SQL语句创建索引
Create [unique] [clustered/nonclustered] index 索引名
On 表名(属性名[asc/desc], 属性名[asc/desc])
注:①若未指定clustered,则创建非聚集索引;
②若未指定排序方式,则为ASC;
③text,ntext类型的字段不能指定为索引字段。
四、删除索引:
Drop index 索引名,…,索引名
思考题:创建主键时,如果使主键字段值不影响数据表的记录顺序?
视图
一、视图的特点:
①视图只有结构,没有记录,是虚表;
②一个视图总对应着一个select语句;
③对视图的查询、更新,实际上是对基本表的查询、更新。
二、定义视图:
1.创建视图:
Create view 视图名 [(属性名,…,属性名)]
As 子查询
[with check option]
说明:视图的属性个数必须与子查询中select子句的表达式个数相同。
2.删除视图: Drop view 视图名,…,视图名
三、查询视图:
select */表达式表
from 视图名,…,视图名
[where 条件]
[group by 属性名]
[order by属性名][Asc/Desc]
四、操纵视图:
1.向视图插入一条记录 insert into 视图名[(属性名表)] values(表达式表)
2.修改视图中的数据 update视图名set 属性名=值,…,属性名=值 [where 条件]
3.删除视图中的记录 delete from 视图名 [where 条件]
存储过程
1.什么叫存储过程?
将一组SQL语句,以一个名称存储在数据库中,就形成存储过程。
2.创建存储过程
Create proc存储过程名[@形参名 类型][=常量][output]
As SQL语句序列
说明:
① [=常量]:用于指定形参的默认值;[output]用来指定该形参值是可以返回的。
触发器
一、维护数据完整性的措施:
创建约束 基于一个表创建
创建触发器
创建规则:以单独的对象创建,可以绑定到数据库的所有表中。
事务处理与并发控制
1.什么叫事务?
事务是用户定义的一组操作序列。
③ 事务是并发控制的基本单位。
④ 一个事务包含的诸操作要么都执行,要么都不执行。
1. 事务的属性
原子性:指事务中包含的诸操作要么都执行,要么都不执行。
一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。
持久性
数据的锁定
一、并发操作与数据不一致性
1.数据不一致性包括三类
丢失修改:指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏事务1提交的结果,导致事务1的修改被丢失。
不可重复读:指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。
读脏数据:指事务1修改某一数据后,事务2读取该数据,事务1由于某种原因被撤销,这时数据又恢复到原值,事务2读到的数据与数据库中的数据不一致,称为“脏”数据。
2.产生数据不一致性的原因
并发操作破坏了事务的隔离性。
二、并发控制的目标、方法
1.目标:确保DB中的数据一致性。
2.并发事务正确性的原则
几个事务的并发执行是正确的,当且仅当其结果与任何一个串行执行的结果相同。
2. 并发控制的方法
DBMS一般采用“封锁”技术,保证并发操作的可串行化。
一、 封锁(Locking)
1. 什么叫封锁?
SQL Server自动强制封锁,并且会将封锁粒度控制在合适的级别,用户不必考虑封锁问题。
2. 封锁类型
排它锁(X锁):事务T对数据A加X锁,其它事务不能再对A加锁,即其它事务不能读取和修改A。
共享锁(S锁):事务T对数据A加S锁,其它事务只能再对A加S锁,即其它事务只能读A,不能修改A。
3. 封锁粒度
封锁对象可以是属性列、元组、关系、整个数据库。封锁对象的大小称为封锁粒度。
封锁粒度越小,并发度越高,但并发控制的开销越大。
4. 封锁协议
① 事务T在修改数据A之前,必须对其加X锁,直到事务结束才释放。
② 事务T在读取数据A之前,必须对其加S锁,直到事务结束才释放。
遵循封锁协议,可以解决三种数据不一致性问题:
丢失修改
不可重复读
读“脏”数据
四、死锁和活锁
封锁技术可以解决并发操作的不一致性问题,但也带来新的问题,即死锁和活锁。
1. 死锁:
① 定义:两个事务已经各自锁定一个数据,但是又要访问被对方锁定的数据,造成了循环等待,称为死锁。
② 避免死锁的方法:
顺序封锁法:若规定封锁顺序为A,B,则T1,T2只能先封锁A,再封锁B。
2.活锁:
① 定义:若多个事务请求封锁同一个数据时,其中的某个事务总处于等待状态,则称为活锁。
② 避免活锁的方法:先来先服务
事务可串行化调度:两段锁协议