资源描述
绪论
l 数据库技术中的四个名词:DB、DBMS、DBS、数据库技术。其概念是不同的。
DB:数据库(Database),DB是统一管理的相关数据的集合。
DBMS:数据库管理系统(Database Management System),DBMS是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型、面向对象型DBMS。
DBS:数据库系统(Database System),DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。
数据库技术:是一门研究数据库结构、存储、管理和使用的软件学科。
l 数据库系统
数据库系统组成, 通常由数据库(DB)、硬件、软件、数据库管理员四部分组成。
l 数据库管理系统
1. 数据库的定义功能。
2. 数据库运行控制功能。DBMS对数据库的控制主要通过四个方面实现:数据安全性控制、数据完整性控制、多用户环境下的并发控制和数据库的恢复。
3. 数据库的维护功能。这一部分包括数据库的初始数据的载入、转换功能、数据库的转储功能、数据库的重组织功能和性能监视、分析功能,大都由各个实用程序来完成。
4. 数据字典(Data Dictionary,记为DD)。数据字典的主要作用是:供数据库管理系统快速查找有关对象的信息。数据库管理系统在处理用户存取时,要经常查阅数据字典中的用户表、外模式表和模式表;供数据库管理员查询,以掌握整个系统的运行情况;支持数据库设计与系统分析。
l 数据库系统的三级模式:
1. 外模式
2. 内模式
3. 模式
4. 模式间的映像
l 数据模型
1.三个世界 现实世界、信息世界、机器世界
数据描述的三个领域(现实世界、信息世界和机器世界)
信息世界中的几个概念:
(1) 实体--即客观存在可以相互区别的事物
(2) 实体集--同类实体的集合
(3) 属性--实体的特性
(4) 实体标识符--唯一标识实体的属性或属性集
机器世界中的四个概念:
(1) 字段--标记实体属性的命名单位称为字段或数据项
(2) 记录--字段的有序集合
(3) 文件--同一类记录的汇集
(4) 键(关键码)--能唯一标识文件中每个记录的字段或字段集。这个概念与实体标识符的概念相对应。
2.数据模型的三要素
(1)数据结构
(2)数据操作
(3)数据的约束条件
3.实体模型,两个实体间的联系可分为3类:
(1)一对一联系(1:1) 如:学校与校长,观众与座位等。
(2)一对多联系(1:n) 如:省与市,学校与系部等。
(3)多对多联系(n:m) 如:学生与课程,教师与课程,师生关系,商店与商品,图书与读者,工厂与产品等。
l 关系数据模型的数据结构
关系:对应通常说的表;
元组:表中的一行即为一个元组;
属性;表中的一例即为一个属性,属性(学号,姓名,性别,系别,年龄和籍贯);
主码(KEY):表中的某个属性组,它可以唯一确定一个元组;
域(domain):属性的取值范围,如人的年龄一般在1-100岁之间。学生年龄属性的域应是(14—38),性别的域是(男,女),系别的域是一个学校所有系名的集合;
分量:元组中的一个属性值;
关系模型:对关系的描述,一般表示为:
关系名(属性1,属性2,……,属性N)
l 关系数据模型的操纵与完整性约束条件
关系数据模型的操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括3大类:实体完整性、参照完整性和用户定义的完整性。
关系数据库
l 关系模型概述
1.关系模型组成
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。关系操作分为两大部分如图所示。
查询
其它
选择 Select
增加 Insert
投影 Project
删除 Delete
连接 Join
修改 Update
除 Divide
并 Union
交 Intersection
差 Difference
2.关系操作的特点
关系操作的特点是操作对象和操作结果都是集合。而非关系数据模型的数据操作方式则为一次一个记录的方式。关系数据语言分为三类:
(1)关系代数语言:如ISBL;
(2)关系演算语言:分为元组关系演算语言(如Alpha,Quel)、域关系演算语言(如QBE);
(3)具有关系代数和关系演算双重特点的语言:如SQL。
l 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。关系的完整性共分为三类:实体完整性、参照完整性、用户定义完整性。
(1)实体的完整性(Entity Integrity)规定:若属性A是基本关系R的主属性,则属性A不能取空值。即主属性不能为空。
(2)参照的完整性(Referential Integrity)规定:若F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系)则对于R中每个元组在F上的值必须为:
①或者取空值(F的每个属性值均为空值);即外码可以为空
②或者等于S中某个元组的主码值。
(3)用户定义的完整性(User defined Integrity):就是针对某一具体的关系数据库的约束条件,由应用的环境决定。
l 关系代数
l 等值连接与自然连接的区别和联系。
答:连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。
SQL语言
l 概念
SQL语言具有DDL、DML、DCL、DQ
功能
查询DQ——SELECT
数据定义DD——CREATE,DROP,ALTER
数据操纵DM——INSERT,UPDATE,DELETE
数据控制DC——GRANT,REVOKE
两种使用方式:直接用SQL,DBMS解释执行;嵌入其它宿主语言
l 定义基本表
CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类>[列级完整性约束条件]]…[,<表级完整性约束条件>]);
列级完整性约束条件有:NULL(空)、UNIQUE(取值唯一),如NOT NULL UNIQUE表示取值唯一,不能取空值。
例 建立一个“供应商”表S(Sno,Sname,Status,City)分别表示:供应商代码、供应商名、供应商状态、供应商所在城市。其中供应商代码不能为空,且值是唯一的,且供应商的名是唯一的。
CREATE TABLE S (Sno CHAR(3) NOT NULL UNIQUE,
Sname CHAR(30)UNIQUE,
Status CHAR(8),
City CHAR(20))
从上述定义可以看出,“Sno CHAR(3)NOT NULL UNIQUE”语句定义了Sno的列级完整性约束条件,取值惟一,不能取空值。
l 修改基本表
ALTER TABLE<表名>[ADD<新列名><数据类型>[完整性约束条件] ] [DROP<完整性约束名>] [MODIFY<列名><数据类型>]
例如,向“供应商”表S增加Zap“邮政编码”可用如下语句:
ALTER TABLE S ADD Zap CHAR(6);
注意,不论基本表中原来是否已有数据,新增加的列一律为空。
又如,将Status字段改为整型可用如下信息:
ALTER TABLE S MODIFY Status INT;
l 删除基本表
DROP TABLE<表名>
l 建立索引
CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>
[<次序>]]…);
秩序可选:ASC(升序),DSC(降序),默认值为ASC。
UNlQUE: 表明此索引的每一个索引值只对应惟一的数据记录。
CLUSTER:表明要建立的索引是聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织。
l 删除索引
DROP INDEX<索引名>
l 视图的创建
CREATE VIEW视图名(列表名)
AS SELECT查询子句
[WITH CHECK OPTION];
注意,视图的创建中,必须遵循如下规定:
(1)子查询可以是任意复杂的SELECT语句,但通常不允许含有order by子句和DISTINCT短语;
(2)WITH CHECK OPTION表示对UPDATE,INSTER,DELETE操作时保证更新、插入、或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式);
(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。
例 建立“计算机”系学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。
CREATE VIEW CS_STUDENT
AS SELECT Sno,Sname,Sage,Sex FROM Student WHERE SD=’CS’
WITH CHECK OPTION
l 查询
数据库查询是数据库的核心操作,SQL语言提供了SELECT语句进行数据库的查询。格式如下:
SELECT[ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]
[WHERE<条件表达式>]
[GROUP BY<列名l>[HAVING<条件表达式>]]
[ORDER BY<例名2>[ASC | DESC] …]
SELECT子句中的输出可以是:列名、表达式、集函数(AVG, COUNT,MAX,MIN,SUM),DISTINCT选项可以保证查询结果集中不存在重复元组。
FROM子句中的出现多个基本表或视图时,系统首先执行笛卡尔儿积操作。
WHERE子句的条件表达式中可以使用的运算符如图3—1所示:
运算符
含义
运算符
含义
集合成员运算符
IN
NOT IN
在集合中
不在集合中
算术运算符
>
≥
<
≤
= ≠
大于
大于等于
小于
小于等于
等于/不等于
字符串匹配运算符
LIKE
与_和%进行单个多个字符匹配
空值比较运算符
IS NULL
IS NOT NULL
为空
不能为空
逻辑运算符
AND
OR
NOT
与
或
非
l 典型题解析
例学生数据库中有三个基本表(关系):
S(Sno,Sname,Age,Sex,SD)
C(Cno,Cname,Teacher)
SC(Sno,Cno.Grade)
请用SQL语言完成以下操作:
(1)检索选修课程名为“MS”的学生号和学生姓名;
(2)检索至少选修了课程号为‘C1’和‘C3’的学生号;
(3)检索选修了‘操作系统’或‘数据库’课程的学号和成绩;
(4)检索年龄在18到20之间(含18和20)的女生的学号、姓名及年龄;
(5)检索选修了“刘平”老师所讲课程的学生的学号、姓名及成绩;
解 (1)检索选修课程名为“MS”的学生号和学生姓名;
方法1 (连接查询)
SELECT S.Sno,Sname;
FROM S,SC,C;
WHERE S.Sno = SC.Sno AND SC.Cno=C.Cno AND C.Cname=’MS’
方法2 (嵌套查询)
SELECT Sno,Sname;
FROM S;
WHERE Sno IN;
(SELECT Sno;
FROM SC;
WHERE Cno IN;
(SELECT Cno;
FROM C;
WHERE Cname=’MS’))
(2)检索至少选修了课程号为‘Cl’和‘C3’的学生号;
SELECT SNO,CNO ;
FROM SC;
WHERE CNO="C1" OR CNO="c3"
(3)检索选修了‘操作系统’或‘数据库’课程的学号和成绩;
方法1 (连接查询)
SELECT Sno,Grade;
FROM SC,C;
WHERE SC.Cno=C.Cno AND (C.Cname = '操作系统' OR;
C.Cname = '数据库')
方法2 (嵌套查询)
SELECT Sno,Grade;
FROM SC;
WHERE Cno IN;
(SELECT Cno;
FROM C;
WHERE C.Cname='操作系统' OR C.Cname = '数据库')
(4)检索年龄在18到20之间(含18和20)的女生的学号、姓名及年龄(范围查询)
方法1
SELECT Sno, Sname, Age;
FROM S;
WHERE Age>=18 AND Age<=20 AND Sex='女'
方法2 (BETWEEN AND)
SELECT Sno,Sname,Age;
FROM S;
WHERE Age BETWEEN 18 AND 20 AND Sex='女'
(5)检索选修了“刘平”老师所讲课程的学生的学号、姓名
方法l (连接查询)
SELECT S.Sno,Sname;
FROM S,SC,C;
WHERE S.Sno = SC.Sno AND SC.Cno=C.Cno AND C.Teacher='刘平'
方法2 (嵌套查询)
SELECT Sno,Sname
FROM S
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM C
WHERE Teacher=’刘平’))
l 数据插入:
INSERT INTO 基本表名(列名表) VALUES (元组值) 或
INSERT INTO 基本表名(列名表) SELECT 查询语句
1.直接插入数据
INSERT INTO 基本表名(列表名)
VALUES(元组值)
或
INSERT INTO基本表名(列表名)
(TABLE(元组值),(元组值),…)
例:insert into xs (xh,xm,xb) values ("9502101","李三","男")
2.插入一个查询结果值
INSERT INTO基本表名(列表名)
SELECT查询语句
l 数据删除:
DELETE FROM 基本表名 [WHERE条件表达式]
例:delete from xs where xh='819910'
l 数据修改:
UPDATE 基本表名
SET 列名=值表达式,[列名=值表达式...]
[WHERE 条件表达式]
l 对视图的更新:
对视图的查询是和基本表相同的,但是更新操作则受到下列三条规则的限制:
· 如果视图是从多个基本表使用联接操作导出的,则不允许更新。
· 如果导出的视图使用了分组和聚合操作,也不允许更新。
· 如果视图是从单个基本表使用选择和投影操作导出的,并且包括了基本表的主码或某个候选码,则可以执行操作。(这就相当于在基本表上操作)。
数据库安全性
l 实现数据库系统安全性的技术和方法有多种,最重要的是存取控制技术和审计技术。
目前许多大型DBMS 达到了C2级,其安全版本达到了B1
C2级的DBMS必须具有自主存取控制功能和初步的审计功能
B1级的DBMS必须具有强制存取控制和增强的审计功能
l 自主存取控制功能一般是通过SQL 的GRANT语句和REVOKE语句来实现的
l 实现数据库安全性控制的常用方法和技术。
答:实现数据库安全性控制的常用方法和技术有:
( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
( 2 )存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。
( 3 )视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
( 5 )数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
l 用SQL的GRANT 和REVOKE语句(加上视图机制)完成授权定义或存取控制功能:
( a )用户王明对两个表有SELECT 权力。
GRANT SELECT ON 职工,部门
TO 王明
( b )用户李勇对两个表有INSERT 和DELETE 权力。
GRANT INSERT,DELETE ON 职工,部门
TO 李勇
( c ) 每个职工只对自己的记录有SELECT 权力。
GRANT SELECT ON 职工
WHEN USER()=NAME
TO ALL;
( d )用户刘星对职工表有SELECT 权力,对工资字段具有更新权力。
GRANT SELECT,UPDATE(工资) ON 职工
TO 刘星
( e )用户张新具有修改这两个表的结构的权力。
GRANT ALTER TABLE ON 职工,部门
TO 张新;
( f )用户周平具有对两个表所有权力(读,插,改,删数据),并具有给其他用户授权的权力。
GRANT ALL PRIVILIGES ON 职工,部门
TO 周平
WITH GRANT OPTION;
( g )用户杨兰具有从每个部门职工中SELECT 最高工资、最低工资、平均工资的权力,他不能查看每个人的工资。
CREATE VIEW 部门工资 AS
SELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)
FROM 职工,部门
WHERE 职工.部门号=部门.部门号
GROUP BY 职工.部门号
GRANT SELECT ON 部门工资
TO 杨兰;
数据库完整性
l 数据库的完整性概念与数据库的安全性概念有什么区别和联系?
l 数据库的完整性
– 数据的正确性和相容性
数据的完整性和安全性是两个不同概念
– 数据的完整性 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据
– 数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作
l RDBMS完整性实现的机制
– 完整性约束定义机制
– 完整性检查机制
– 违背完整性约束条件时RDBMS应采取的动作
[例] 定义SC中的参照完整性
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/*在表级定义参照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/*在表级定义参照完整性*/
);
[例] Student表的Ssex只允许取“男”或“女”。
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’) ) ,
/*性别属性Ssex只允许取'男'或'女' */
Sage SMALLINT,
Sdept CHAR(20)
);
关系数据理论
l 范式
在关系数据库中的一个非常重要的问题就是如何评价分解后的各个关系模式的好坏。通常可以通过判断分解后的模式达到几范式来评价模式的好坏。范式有:1NF、2NF、3NF、BCNF、4NF和5NF。这几种范式之间的关系如下: 1NF2NF3NFBCNF4NF5NF
通过模式分解,将低一级范式的关系模式分解成了若干个高一级范式的关系模式的集合,这种过程叫做规范化。下面将给出各个范式的定义。
1.1NF(第一范式)
定义 若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式(1NF)。
2.2NF(第二范式)
定义 若关系模式R1NF,且每一个非主属性完全依赖于码,则关系模式R2NF。
即当1NF消除了非主属性对码的部分函数依赖,则成为 2NF。
例 FIRST关系中的码是Sno、Pno,而SnoStatus,因此非主属性Status部分函数依赖于码,故非2NF的。
若此时,将FIRST关系分解为:
FIRSTl(Sno,Sname,Status,City)2NF
FIRST2(Sno,Pno,Qty) 2NF
因为FIRSTl和FIRST2中的码分别为Sno和Sno,Pno每一个非主属性完全依赖于码。
3.3NF(第三范式)
定义 若关系模式R(U,F)中不存在这样的码X,属性组Y及非主属性Z(ZY)使得XY,(YX)YZ成立,则关系模式R3NF。
即当2NF消除了非主属性对码的传递函数依赖,则成为3NF。
例 FIRSTl3NF,因为在分解后的关系模式FIRSTl中有:
SnoStatus,StatusCity,存在着非主属性City传递依赖于码Sno。
4.BCNF(巴克斯范式);
定义 若关系模式R1NF,若XY且YX时,X必含有码,则关系模式RBCNF。
即当3NF消除了主属性对码的部分和传递函数依赖,则成为 BCNF。
结论 一个满足BCNF的关系模式,应有如下性质:
(1)所有非主属性对每一个码都是完全函数依赖;
(2)所有非主属性对每一个不包含它的码,也是完全函数依赖;
(3)没有任何属性完全函数依赖于非码的任何一组属性。
学生(学生号,学生姓名,姓别,班级,…,家长姓名,家长电话,家庭住址)
学生姓名,家长姓名->家长电话,家庭住址
数据库设计
l 需求分析;
l 概念结构设计:ER模型(基本元素、联系的类型与属性、表示、设计),局部ER的集成依据与优化,冲突的消除,实体之间的联系类型(1:1、1:n、m:n)
l 逻辑结构设计:ER模型向关系模型的转换(联系的转换、主键与外键)
1) ER模型向关系模型的转换应遵循如下原则:
①每个实体类型转换成一个关系模式;
②一个1:1的联系可转换为一个关系模式,或与任意一端的关系模式合并。若独立转换为一个关系模式,那么,两端关系的码及联系的属性为该关系的属性,且两端关系的码均可作为候选码;若与一端合并,那么将另一端的码及联系的属性合并到该端。
③一个1:n的联系可转换为一个关系模式,或与n端的关系模式合并,若独立转换为一个关系模式,那么,两端关系的码及联系的属性为关系的属性,而n端的码为关系的码;
④一个n:m的联系可转换为一个关系模式,那么,两端关系的码及联系的属性为关系的属性,而关系的码为两端实体的码的组合;
⑤三个或三个以上多对多的联系可转换为一个关系模式,那么,诸关系的码及联系的属性为关系的属性,而关系的码为各实体的码的组合;
⑥具有相同码的关系可以合并。
2)转换为DBMS支持下的数据模型:
向特定的DBMS支持下的数据模型转换需要熟悉所用的RDBMS的功能与限制,它依赖于机器,所以不加介绍。例如用SQL的DDL定义基本表、视图等。
3)对数据模型进行优化:
对数据模型优化步骤如下:
① 确定数据依赖;
② 进行极小化处理,消除冗余联系;
③ 确定各关系模式属于几范式,考察是否存在部分、传递、多值函数依赖,并根据需求阶段的处理要求,确定是否要进行合并与分解。
l 物理结构设计
对于一个给定的逻辑数据模式选取一个最适合应用环境的物理结构的过程,称为数据库的物理设计。
l 数据库的实施与维护
(1) 数据库实现阶段的工作。
建立实际数据库结构;试运行;装入数据;
(2) 其他有关的设计工作。
数据库的重新组织设计;故障恢复方案设计;安全性考虑;事务控制;
(3) 运行与维护阶段的工作。
数据库的日常维护(安全性、完整性控制,数据库的转储和恢复);性能的监督、分析与改进;扩充新功能;修改错误。
PD中:概念模型设计->CDM, 逻辑、物理模型设计->PDM
l 数据库物理设计的内容和步骤。
答:数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于给定的 DBMS 。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构,就是数据库的物理设计的主要内容。数据库的物理设计步骤通常分为两步: ( l )确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构; ( 2 )对物理结构进行评价,评价的重点是时间效率和空间效率。
关系系统及其查询优化
l 关系代数表达式中的查询优化
关系系统的查询优化既是关系数据库管理系统实现的关键技术,又是关系系统的优点。因为,用户只要提出“干什么”,不必指出“怎么干”。
在关系代数表达式中需要指出若干关系的操作步骤,问题是怎样做才能保证省时、省空间、效率高,这就是查询优化的问题。
需要注意的是,在关系代数运算中,笛卡尔积、连接运算最费时间和空间,究竟应采用什么样的策略,节省时间空间,这就是优化的准则。
1.优化的准则
(1) 选取运算尽可能先做
(2) 在执行连接前对关系适当地预处理,方法有两种:
索引连接法、排序合并连接法
(3) 将投影运算和选择运算同时进行
(4) 将投影运算和其前后的二目运算结合起来
(5) 将投影同其前面要执行的笛卡儿积结合起来成为一个连接运算
2.关系代数表达式的等价变换规则
在教学数据库S、SC、C中,用户有一查询语句:检索女同学选修课程的课程名和任课教师名。
(1)试写出该查询的关系代数表达式;
(2)试写出查询优化的关系代数表达式。
(1)πCNAME,TEACHER(σSEX='女'(SSCC))
(2)优化为:πCNAME,TEACHER(CπC#(πS#,C#(SC)πS#(σSEX='女'(S))))
(基本思路:尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值。
数据库恢复技术
l 事务的基本概念
事务(Transaction)事务是用户定义的一个操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。事务和程序是两个概念,一般程序包含多个事务。
事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:
BEGIN TRANSACTION 事务开始
<对数据库的更新操作>
COMMIT 事务提交
ROLLBACK 事务回滚
l 事务的特性
事务具有四个特性,简称ACID特性。
A.原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
B.一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始时的一致状态。
C.隔离性(Isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
D.持续性(Durability) 持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
举例:银行转帐事务
该事务把一笔金额从一个帐户甲转给另一个帐户乙。
BEGIN TRANSACTION
读帐户甲的余额BALANCE;
BALANCE = BALANCE-AMOUNT; --AMOUNT 为转帐金额
IF(BALANCE<0) THEN {
打印′金额不足,不能转帐′;
ROLLBACK; --撤消该事务
}
ELSE {
读帐户乙的余额BALANCE1;
BALANCE1 = BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT; --提交该事务
}
并发控制
l 概念
1. 在数据库中为什么要并发控制?
数据库是共享资源,通常有许多个事务同时在运行。
当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。
2. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?
并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。
(1)丢失修改(Lost Update)
两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。
(2)不可重复读(Non-Repeatable Read)
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
(3)读“脏”数据(Dirty Read)
读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
避免不一致性的方法和技术就是并发控制。最常用的并发控制技术是封锁技术。
3. 什么是封锁?
封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。
4. 基本的封锁类型有几种?试述它们的含义。
5. 基本的封锁类型有两种: 排它锁(Exclusive Locks,简称X锁) 和共享锁(Share Locks,简称S锁)。
排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
6. 什么样的并发调度是正确的调度?
可串行化(Serializable)的调度是正确的调度。
可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度
展开阅读全文