数据库期末复习题笔记~~

来源:互联网 发布:字符型数组java 编辑:程序博客网 时间:2024/06/02 23:58

数据库系统概论期末复习

第一部分  数据库系统概论

1. 数据处理技术发展经历

        人工管理、文件系统、数据库系统、分布式系统

系统|特点

数据结构化

数据共享

数据独立性

数据粒度小

操作界面

 

人工管理

无结构化

完全依赖

/

/

 

文件系统

有结构,但相互独立

数据文件间相互独立

程序与数据相互依赖

以记录为基本单位处理

依赖程序的操作界面

 

数据库系统

有结构,文件间相互联系——数据库结构

共享

数据通过DMBSOS与程序保持联系

以记录中数据项为处理单位

有独立的数据操作界面DBMS

DBMS管理

分布式系统

具有上面五个特点外,还具有系统的可靠性高。支持客户的局部应用与支持客户的全局应用。P6

重点在于:文件系统与数据库系统的区别

    2. 数据库系统的特点

        结构化、减少数据冗余、数据共享、数据完整性、安全性和并发控制等

    3. 数据模型

1       数据联系:涉及到几个实体就称为几元联系。

2       概念:实体、属性(主属性与非主属性)、码、域、联系类型(1对多,11,多对多)

3       数据模型分为:不管那种类型,都有型与值的区别。型是抽象的、静态的、相对不变的;值是具体的、动态的、常变化的。

l         概念模型(用E-R图描述)

l         逻辑模型:

层次——一种树型结构模型、只有一个根,每个结点只有一个父结点;

网状——一种图形结构,允许有多个双亲

以上两种隐含1M的联系,数据操作都要给出完整的路径——称操作方式是过程式的。只是后者的操作更灵活。——两者本质上是一致的,所以统称为非关系模型。

关系模型——是一个二维表格结构。

所有的数据模型都有型与值的概念。但前面四种的处理信息的基本单位为数据记录,而面向对象型还包括图型等信息,即基本单位为对象。

 

    4. 数据库体系结构

l         三级模式结构(局部()、全局(概念)、存储()),内模式、全局模式只有一个,外模式则可以任意多个。

l         两级映象(局部/全局、全局/存储)

l         三级体系结构及两级映象结构确保了数据的逻辑和物理独立性

    5. 数据库管理系统的功能

        定义、操纵、控制、维护、数据字典

 

第一章:课后的习题

 

第二部分  关系运算

 

关系模型包括关系数据结构、关系完整性规则和关系运算三个方面。

一、关系数据结构

   1、笛卡儿积:一组域上的集合。

D1*D2*D3。。。Dn={d1,d2,d3….

(1)笛卡儿积中的每个元素称为元组。元组的个数称为基数。

1D1={123} D2={4} D3={56}

Q1:基数分别为多少?(312

Q2:三者的笛卡儿积的基数是多少(即有多少个元组)?(3*2*1=6

Q3:写出笛卡儿积:{145146245246345346}

     (2)N个域上笛卡儿积对应一张二维表。

2、关系

1)关系是笛卡儿积的一个子集。

2)关系的六个性质。

3、码:分为超码、候选码、主码、备用码、外码

4、关系模式:是一个关系的型,即表的结构。关系模式的表示方法:RU——R称为关系名字,U——属性集合。

或者写成:RA1A2A3。。。)

 

   二、关系完整性

  1、实体完整性:主码不能空,特别在复合属性的主码上要注意

2、参照完整性:外码或为空,或者为被参照关系中某个元组的主码。外码(子)与主码(父)间隐含的是父子关系(1N

3、用户定义的完整性:

 

三、关系代数

  1、传统的集合运算:

并:求出两个关系中所有元素集合,完全相同的只保留一个;

交:求出两个关系中相同的元素

差:求出前者与后者不同的元素

注意:交并差一定要在相同结构的模式中操作;

笛卡儿积:

  2、专门的关系运算

1)选择δ

2)投影Õ

3)连接><:等值连接、自然连接

例:设学生选课涉及三个关系即学生关系S、课程关系C和学生选课关系SC,它们的结构如下所示:

SS# SN SEX AGE DEPT

CC# CN

SCS# C# GRADE

请用关系代数表达式表示下列查询。

Q1:写出姓名为李小波的学号及系名所对应的运算表达式

IIs#,dept(δsn=’李小波’(S))

Q2:写出李小波选修的课号、课名及成绩

     IIc#,cn,grade((δsn=’李小波’(S)) >< C)

Q3:查询至少有一门选修课程成绩高于85分的学生的姓名及所在专业系。

ÕSNDEPT ((δGRADE>85 (SC ) )>< S)

Q4:查询姓名为变量name的值的学生所选修的全部课程信息。

       Õc#CN(C><ÕC#(SC ><(δSN=sn1(S ))))

 

课后习题

 

第三部分  关系规范化基础

. 数据不规范化带来的问题

        数据冗余、插入异常、删除异常、修改异常

. 函数依赖

1  属性间联系:

2  函数依赖与相互函数依赖:例X决定YY决定X

3  非平凡和平凡函数依赖

4  部分和完全函数依赖:

1)部分函数依赖必然为传递函数依赖,反之不对。

2)部分函数依赖仅在复合候选码时才有可能出现。

5  直接和传递函数依赖

6  最小函数依赖集:X决定Y是完全非函数依赖,且Y是单属性,则是最小函数依赖,一个关系所有的最小函数依赖,就称为最小函数依赖集。

1RABCD),函数依赖集F={A->CC->A,B->AC,D->AC,BD->A}

Q1:这是最小函数依赖集吗?如果不是,写出最小函数依赖集

Q2:找出候选码——BD

 

2RABCDEP),函数依赖集F={A->DE->D,D->B,BC->D,DC->P}

Q1:这是最小函数依赖集吗?如果不是,写出最小函数依赖集

Q2:找出候选码——AEDBCDC——AEC

 

3 零件(零件号,零件名称,仓库号,地址,职工号)

写出最小函数依赖关系(每个仓库只有一个职工负责,每个职工也只负责一个仓库,仓库可以放很多零件,每种零件只放在一个仓库)

FD={仓库号->地址,仓库号->职工号,职工号->仓库号 零件号->仓库号,零件号->零件名称}

 

 

7  函数依赖常用规则

1   自反性:X包含Y,则存在X决定Y

2   增广性:X决定Y,则XZ决定YZ

3   传递性:X决定YY决定Z,则X决定Z

4   合并性:X决定YX决定Z,则X决定YZ

5   分解性:X决定YY包含Z,则X决定Z

6   伪传递性:X决定YWY决定Z,则WX决定Z

7   复合性:X决定YZ决定W,则XZ决定WY

8   自增性:X决定YWX决定Y

 

 

三、关系规范化

1、第一范式:表中每个属性不可再分割(即表中不嵌套表,或者说表中的某些属性又包含属性)

例:t(t#,sex,age,tel(h_tel,o_tel,y_tel))——规范成第一范式有几种方法:

1)将属性展开成单属性:t(t#,sex,age, h_tel,o_tel,y_tel)

2)从元组上展开:t(t#,sex,age,tel)——一个人三个电话则重复存储这人三次

3)从关系上分解成两个关系       t(t#,sex,age)tel(t#,h_tel,o_tel,y_tel)

例:RX1X2X3——至少满足第一范式

 

2、第二范式:所有非主属性对候选码都不存在部分函数依赖

 

3、第三范式:所有非主属性对候选码都不存在传递函数依赖

前三个范式都是指非主属性对主属性存在的函数依赖关系。

4BCNF:所有属性对候选取码(非主属性与主属性)之间都不存在传递函数依赖关系。

判断范式的流程:

1NF规范到2NF3NF:采用分解关系的方法,理论上说是消除关系中的部分依赖、传递函数依赖,实际分解中简单的方法是将决定因素与它的被决定因素写在一个关系中即可。如果关系的候选码没有完全出现在一个关系中,则要由候选码单独组成一个关系。

 

例:1、一个关系模式为YX1X2X3X4)假定该关系存在如下函数依赖:(X1X2)决定X3X2决定X4,则该关系属于    1NF    范式,因为它存在着部分依赖

例:2、一个关系模式YX1X2X3X4)假定该关系存在如下函数依赖:X1决定X2X1决定X3X3决定X4,则该关系属于第  2NF   范式,因为它存在着传递依赖

例:3、一个关系模式YX1X2X3X4)假定该关系存在如下函数依赖:X1X2相互依赖,X1决定X3X1决定X4,则该关系属于  BCNF  范式。

最后注意问题:

规范化并不是程序越高越好,要依据应用而定。

课后习题

 

第四部分 结构化查询语言---SQL

    . SQL语言的特性

       1、综合统一、高度非过程化、集合操作、自含与宿主、SQL结构

          2SQL具有数据定义(DDL)、数据操纵(DML)、数据控制(DCL)等功能

          3SQL的数据定义功能能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。外模式又叫视图(View)、全局模式简称模式(Schema)或数据库(Database),内模式由系统根据数据库模式自动实现,一般无需用户过问。

          4、在SQL中,每个关系又叫做基本表或表(Table),每个关系中的属性又叫字段或列,元组又叫行。一个数据库由若干基本表组成,通常一个基本表对应存储在外存数据库空间的一个存储文件中。

          5、每个视图也是一个关系,它由基本表产生出来,有自己独立的结构定义,但没有独立的数据存在,它的数据来自基本表,间接地来自存储基本表的数据存储文件,所以又称视图为虚表,而基本表为实表。

           6SQL的数据操纵功能包括对基本表和视图的数据查询、插入、删除和修改,特别是具有很强的数据查询功能。

          7SQL的数据控制主要是对用户的访问权限加以控制,以保证系统的安全性。 DBA负责进行控制和管理。

 

    . 数据库操作

1  建立数据库模式的命令:

  CREATE   {SCHEMA|DATABASE}  <数据库名>

 [AUTHORIZATION <所有者名>]

  例: create database  SC   //建立SC数据库

2  删除数据库模式的命令:

  DROP   {SCHEMA|DATABASE}  <数据库名>  

  例: DROP database  SC   //删除SC数据库

 

3  表结构的建立

CREATE  TABLE  <表名>(…

 每个列后面的完整性约束称为列级完整性约束,它给出对该列数据的完整性约束条件;列级完整性约束有六种。

  表级完整性约束在所有列定义后给出,它包括四种(主码约束PRIMARY KEY、单值约束UNIQUE、外码约束FOREIGN KEY … REFERENCES … 和检查约束CHECK)。

1)主码约束隐含非空与单值。

3)掌握四种表级约束的关键字

 

4  表结构的修改

ALTER  TABLE  <表名>(…

向已定义过的表中添加(ADD)一些列的定义或一些表级完整性约束,或者从已定义过的表中删除(DROP)一些列或一些完整性约束。

    DROP  TABLE […] <表名>

从当前或给定的数据库中删除一个表。

 

5  表内容的插入、修改和删除

INSERT INTO  <表名>(…)

UPDATE  <表名>  SET (…)

DELETE  [FROM]  <表名> (WHERE…) 

 

6  视图的建立、修改和删除

          CREATE  VIEW  <视图名>(… AS <select…>

                                   //建立视图

          UPDATE  <视图名>  SET (…)//修改视图内容

          ALTER VIEW <视图名>(…) AS <…>

                       //修改视图结构

          DROP VIEW  < 视图名> //删除视图

 

 

 

    . 数据库查询(重点)

1SELECT查询语句具有丰富的数据查询功能,能够实现关系运算中的大多数运算,如选择、投影、连接、并等,并且还带有分组、排序、统计等数据处理功能。

2SELECT查询语句的结果有多种可能,有可能为空、单值元组或为一个多值元组等,若为单值元组时,此查询可以作为一个数据项出现在任何表达式中。

例:Select * from 商品表1 where 单价>(select avg(单价) from 商品表1)

3SELECT语句可以作为一个语句成分(即子查询)出现在各种语句中,若在SELECT语句的WHERE选项中仍使用一个SELECT语句,则称为SELECT语句的嵌套

    4SQL查询只对应一条语句,即SELECT语句。该语句带有丰富的选项(子句),每个选项都由一个特定的关键字标识,后跟一些需要用户指定的参数。

    5SELECT 语句格式:

    1SELECT …

    2FROM…

    3WHERE…该子句的功能是对记录的筛选条件和指定源表之间的连接条件。

    用于查询语句中的专门比较式又叫判断式,它实现单值与集合数据之间的比较,常用有六种格式(ALLANY|SOME[NOT] BETWEEN [NOT] EXISTS [NOT] IN [NOT] LIKE

     

    4GROUP BY…注意分组列名必须是出现在SELECT选项中的被投影的列。

    主要用于进行分组统计(一般后跟一到两个列名)。

    5HAVING…用于GROUP BY子句之后,进行分组后筛选条件的给定子句。

    6ORDER BY…该选项用于对查询结果按给定的属性列的值的升序或降序排列。

    该选项只能用在最外层的查询语句中,不能在子查询中使用。

    7INTO 选项

    此选项能够根据查询结果自动建立一个基本表,通常是作为临时表使用,可以根据需要任意建立和删除。

    使用临时产生的表,同使用其它基本表一样,没有任何区别,当不再需要时,可使用DROP TABLE 语句删除掉。

    7)使用列函数

    COUNT(…)

    MAX(…)

    MIN(…)

    AVG(…)

    SUM(…)

    例:假设学生选课数据库有三个表即学生表S、课程表C和学生选课表SC,它们的结构如下所示,请根据所给的每种功能写出相应的查询语句。

      SS# SN SEX AGE DEPT

      CC# CN

      SCS# C# GRADE

    其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。

Ø       查询所有姓王的学生的姓名和性别。

SELECT   SNSEX

FROM     S

WHERE   SN  LIKE ‘*’

 

Ø       统计学生选课数据库中开出的课程总数。

SELECT   COUNT*  AS  课程总数

FROM    C

 

Ø       查询每个学生选修每门课程的有关课程数据(姓名、课程名和成绩等)

SELECT  SSNCCNSCGRADE

FROM    SCSC

WHERE   SS#=SCS#  AND  CC#=SCC#

 

Ø       从学生选课库中查询出被3名以上(不含3名)学生选修的所有课程信息。。

SELECT  *

  FROM  C

WHERE  EXISTS

      SELECT  C#

           FROM  SC

           WHERE  C .C#=SC.C#

           GROUP  BY  C#

      HAVING  COUNT*> 3

          )

 

Ø       从学生选课库中查询出最多选修了1门课(含未选任何课程)的全部学生信息。

SELECT  *

    FROM  S

  WHERE  S#  IN

   SELECT  S#

         FROM    SC

   GROUP  BY  S#

   HAVING  COUNT*=1   

         

 OR  NOT EXISTS

     SELECT  *

            FROM  SC

            WHERE  S.S#=SC.S#

          )

 

Ø       查询所有与张建同年出生的学生姓名、年龄和性别(假设库中只有一个学生的姓名为张建)。

SELECT  SNAGESEX

FROM    S

WHERE  AGE=

  SELECT  AGE 

   FROM    S

   WHERE   SN=”张建

 

Ø 从学生选课库中查询出每门课程被选修的学生人数,并按所选人数的降序排列出课程号和选课人数。

SELECT  CC#COUNT(CC#)  AS  人数

  FROM  CSC

  WHERE  CC#=SCC#

 GROUP  BY    CC#

 ORDER  BY  人数 DESC

 

 

注意:(1)首先要掌握数据表中各个字段的含义(即对表结构要了解清楚!)

     2 书写格式:

     SELECT 列名

FROM   表名

WHERE  条件表达式或连接条件

3)涉及到多个表时,一定要写上连接条件,并对两表中相同重复的列加声明。

 

        第五部分 数据库应用系统设计

 

 数据库应用系统设计过程包括六个阶段

 

 

 

 

设计局部E-R——>优化后——>综合成整体E-R P:115

 

主要任务与目标P116

设计好全局模式(数据库——若干个基本表,表间联系靠主码与外码联系),再设计外模式(视图),导出初始关系模式。(P117),掌握由ER图设计出关系模式

 

集资料

分析整理 P114主要目标、DFDDD、需求说明书

数据流图

数据字典

 

课后的习题

6部分 查询优化(文科不作要求)和并发控制

 一、查询优化的一般策略:

1.选择运算尽早进行:最有效地优化查询所占的时间和空间

2.投影运算和选择运算同时进行。

3.将笛卡儿积与随后的选择运算合并为自然连接或θ连接。

4.投影运算与其它运算同时进行。

5.寻找公共表达式并将结果加以存储:视图是最好的应用

6.对文件进行预处理:对相关属性进行建立索引或排序。

 

二、关系代数的等价变换E1≡E2两关系代数式E1E2等价

1.变换规则:

(1)连接或笛卡儿积的交换律

   设关系代数式E1E2F是连接的条件,则有:

1a 笛卡儿积:E1X E2≡ E2X E1

1b 自然连接:E1 E2≡ E2 E1

1c θ连接:E1F E2≡ E2F E1

 

(2)连接或笛卡儿积结合律

   设关系代数式E1E2E3F1F2是连接的条件,F1只涉及E1E2的属性,F2只涉及E2E3的属性,则有:

2a 笛卡儿积:(E1X E2)X E3≡E1X (E2X E3)

2b 自然连接:(E1 E2) E3≡ E1 (E2 E3)

2c θ连接:(E1F1 E2F2) E3≡ E1F1 (E2F2 E3)

 

(3)投影的串接律:关系代数式EAB为属性集且AB,则有:   πA(πB(E))πA(E)

 

(4)选择的交换/串接律:关系代数式EF1F2是条件,则:

4a  交换律:σF1(σF2(E)) ≡ σF2(σF1(E))

4b  串接律σF1(σF2(E)) ≡ σF1F2(E)

 

(5)选择与投影的交换/串接律

5a  交换律:F条件只涉及A1,A2,…An,则

πA1,A2,...An(σF(E))σF(πA1,A2,...An (E))

5b  串接律

F条件中有不属于A1,A2,…An的属性B1,B2,…Bm

πA1,A2,...An(σF(E))πA1,A2,...An(σF(πB1,B2,...Bm(E)))

 

(6)选择对笛卡儿积的分配律:

6a 若条件F只涉及E1属性,则:σF(E1X E2) σF(E1) X E2

 

6b 若条件F= F1F2F1只涉及E1的属性,F2只涉及E2的属性,则有:σF(E1X E2) σF1(E1) X σF2(E2)

 

(7)投影对笛卡儿积的分配律:

  关系代数式E1E2Ai(i=1,2,…,n)E1的属性,Bj(j=1,2,…,m)E2的属性,则:

πA1,A2,...An,B1,B2,...Bm(E1X E2)πA1,A2,...An(E1) X πB1,B2,...Bm(E2)

 

(8)选择对并的分配律:

关系代数式E1E2具有相同的属性集,则有:

σF(E1E2) σF (E1)σF(E2)

 

(9)投影对并的分配律:

关系代数式E1E2具有相同的属性集,则:

πA1,A2,...An(E1E2) πA1,A2,...An(E1)πA1,A2,...An(E2)

 

(10)选择对差的分配律

关系代数式E1E2具有相同的属性集,则有:

σF(E1-E2) σF (E1)-σF(E2)

2.应用举例:设图书管理数据库有:

B(T,A,P,BN), keyBN    S(N,C,LN), keyLN

L(LN,BN,D), keyLN,BN(设一人一次只能借一本书)

要求:找出2001年元旦前借出的图书的书名(T)及借书学生的姓名(N)

U=πR(σF(B X S X L))

其中R(T,A,P,BN,N,C,LN,D)FS.LN=L.LN and B.BN=L.BN,则结果为πT,N(σD<20010101(X))

     πT,N

 σD<20010101

 πT,A,P,BN,N,C,LN,D

σB.BN=L.BN and S.LN=L.LN

      X

   B    X

       S    L

 

 

则原是语法树如下:

 

 

 

 

 

 

 

 

 

 

 


变换过程:

(1)应用4b  σF1(σF2(E)) ≡ σF1F2(E)

σB.BN=L.BN and S.LN=L.LN  (a) σS.LN=L.LN

                             (b) σB.BN=L.BN

(2)应用5a  πA1,A2,...An(σF(E))σF(πA1,A2,...An (E))

交换σD<20010101πT,A,P,BN,N,C,LN,D

应用4a  σF1(σF2(E)) ≡ σF2(σF1(E))

交换σD<20010101 (a) σS.LN=L.LN

                     (b) σB.BN=L.BN

得到σD<20010101(B X S X L)

应用6a  σF(E1X E2) σF(E1) X E2

得到B X S X σD<20010101(L)

得到σB.BN=L.BN(σS.LN=L.LN(B X S X σD<20010101(L))

(3)应用6a  σF(E1X E2) σF(E1) X E2

得到B X (σS.LN=L.LN(S X σD<20010101(L)))

(4)应用3  πA(πB(E))πA(E),有

πT,N(πT,A,P,BN,N,C,LN,D(...))πT,N(...)

可获取的中间语法树为

        πT,N

    σB.BN=L.BN

        X

    B     σS.LN=L.LN

              X

           S    σD<20010101

                   L

 

 

 

 

 

 

 

 

 

 

 

 

 


(5)应用5b πA1,A2,...An(σF(E))πA1,A2,...An(σF(πB1,B2,...Bm(E)))

πT,N(σB.BN=L.BN(...))

πT,N(σB.BN=L.BN(πT,N,B.BN,L.BN(...)))

 

(6) πT,N,B.BN,L.BN  πT, B.BN

                    πN, L.BN   

应用7

πA1,A2,...An,B1,B2,...Bm(E1X E2)πA1,A2,...An(E1) X πB1,B2,...Bm(E2)

得到:πT,N(σB.BN=L.BN(πT, B.BN(B) X πN, L.BN(

σS.LN=L.LN(S X σD<20010101(L)))))

(7)应用5b πA1,A2,...An(σF(E))πA1,A2,...An(σF(πB1,B2,...Bm(E)))

得到:πN,L.BN(σS.LN=L.LN(S X σD<20010101(L)))

πN,L.BN(σS.LN=L.LN(πN,L.BN,S.LN,L.LN(

S X σD<20010101(L))))

(8) πN,L.BN,S.LN,L.LN  πN,S.LN

                       πL.BN,L.LN   应用7

πA1,A2,...An,B1,B2,...Bm(E1X E2)πA1,A2,...An(E1) X πB1,B2,...Bm(E2)

得到:πN,S.LN(S) X πL.BN,L.LN(σD<20010101(L))

应用5b πA1,A2,...An(σF(E))πA1,A2,...An(σF(πB1,B2,...Bm(E)))

得到:πL.BN,L.LN(σD<20010101(πL.BN,L.LN,D(L)))

  到此L的属性全取用,停止优化,此步删除。

最终得到的优化语法树如下:

 

 

 

 

 

 

 

 

 

 

 

 

          πT,N

σB.BN=L.BN

         X

 πT, B.BN   πN, L.BN

     B     σS.LN=L.LN

                X        πN,S.LN    πL.BN,L.LN

        S       σD<20010101

                      L

 

 

 

 

 

 

 

 

 

 

 

 

 


结果:

πT,N(σB.BN=L.BN(πT, B.BN(B) X πN, L.BN(σS.LN=L.LN(

πN,S.LN(S) X πL.BN,L.LN(σD<20010101(L))))))

因为公共属性值相等的连接是自然连接,所以等价于

πT,N(πT, B.BN(B) πN, L.BN(πN,S.LN(S)

πL.BN,L.LN(σD<20010101(L))))

πT,N

πT, B.BN   πN, L.BN

B       

πN,S.LN   πL.BN,L.LN

S      σD<20010101

                L

 

 

则对应的语法树为:

 

 

 

 

 

 

 

 

 

 

 

 


三、查询优化步骤

1.把查询转换成一种内部表示(语法树)。

2.利用关系代数等价变换规则以及查询优化的一般策略,将语法树进行优化(选择运算应该及早做)。

3.选择适当的低层存取路径(充分利用索引)。

4.生成一组查询计划,从中选择一个代价最小的(主要考虑外存的读写次数)。

 

四、并发调度:

1.事务(transaction)

是数据库的一个或多个操作序列,必须以原子的方式执行。

SQL中不必给出事务开始语句,但必须明确事务的结束,有以下两种方式:

(1)SQL语句commit(提交)使事务成功结束(更新数据库)

(2)SQL语句rollback(退回)使事务不成功终止(不更新数据库)

 

2.数据不一致:

并发操作的不正确调度所可能带来的数据不一致性有三种情况:

(1)丢失修改:第一次修改被第二次修改覆盖

(2)数据T2读取T1修改后数据,然后T1又撤消修改

(3)不可重复读T1按条件F读数据,然后T2更新,接着T1再按条件F读数据,结果不一致

3.可串行化调度:

将可串行化的并发事务调度当作唯一能够保证并发操作正确性的调度策略。即:若并发操作调度的结果与按照某种顺序串行执行这些操作的结果相同,就认为并发操作是正确的。

 

eg:设有S1S2同时对学生选课数据库进行操作。

S1的事务:选修“数据库原理”课,余额A

AA=A-1;写回A

S2的事务:退选“数据库原理”课,余额A

AA=A+1;写回A

A20,按S1S2串行:

S1A=20A=A-1=19;写回A=19

S2A=19A=A+1=20;写回A=20  结果A=20

A20,若按S2S1串行:

S2A=20A=A+1=21;写回A=21

S1A=21A=A-1=20;写回A=20  结果A=20

根据可串行化的准则,S1S2并发执行的结果只要和任意一种串行化调度执行结果相同,就认定为正确。

 

五、封锁管理:

为保证对并发操作的调度满足可串行化条件,通常采用封锁机制。

1.主要概念:

封锁 指某事务在对某数据对象进行操作以前先请求系统对其加锁,成功之后该事务就对该数据对象拥有控制权,只有该事务对其进行解锁之后,其他事务才能使用该数据对象。

分为  排它锁(exclusive lockX锁、写锁)

      共享锁(share lockS)

 

X:若事务T对数据对象A加了X锁,则T可对A进行读取/更新操作;在T释放A上的X锁之前,其他事务不能读取/更新A

S:若事务T对数据对象A加了S锁,则T可对A进行读取,不能更新;在T释放A上的S锁之前,其他事务可以读取A,不能更新A

粒度(granularity)p112  封锁对象的大小。

粒度大,并发程度低;反之,并发程度高。一般在系统中提供不同粒度的封锁供不同事务选用。

 

2.封锁协议(locking protocol)

  三级封锁协议:保证数据一致性

  两端封锁协议:保证并发调度可串行化

 

(1) 三级封锁协议:

A.1级封锁协议:事务T在修改数据A前必须对其加X锁,直到事务结束才释放。(解决丢失修改

B.2级封锁协议1+事务TA前加S锁,读入后可立即释放S锁。(避免丢失修改+防止读“脏”数据

C.3级封锁协议1+事务TA前加S锁,直到事务结束才释放。(避免丢失修改+防止读“脏”数据+解决不可重复读

 (2) 两段封锁协议(two-phase locking)

   事务T对数据A进行读/写以前,必须先获得对A的锁(加锁),且在释放一个锁之后(解锁)T不能在获得任何其他锁。 
原创粉丝点击