数据库第八章

合集下载

第八章 数据库管理(部分)

第八章 数据库管理(部分)

三、SQL中的完整性约束
1. 域完整性规则:定义属性的取值范围―-属性值约束。 包括:域约束子句、非空值约束、基于属性的检查子句。
①用“CREATE DOMAIN”语句定义新的域,并可出现CHECK子句。
例:
定义一个新的域DEPT,可用下列语句实现:
DEPT CHAR(20) DEFAULT „计算机软件’
二、完整性规则的组成与分类
1、每个规则由三部分组成:
①什么时候使用规则进行检查(规则的“触发条件”);
②要检查什么样的错误( “ 约束条件”或“谓词”);
③若检查出错误,该怎样处理( “ELSE子句”,即违反时 要做的动作)。 2、在关系数据库中,完整性规则可分为三类: ①域完整性规则:定义属性的取值范围; ②基本表约束; ③断言。
CREATE DOMAIN
CONSTRAINT
VALID_DEPT
/*域约束名字*/
CHECK(VALUE IN („计算机科学与技术’,„计算机软件’)); 允许域约束上的CHECK子句中可以有任意复杂的条件表达式。
②非空值约束(NOT NULL) 例: SNO char(4) NOT NULL ③基于属性的检查子句(CHECK): 例:CHECK (GRADE IS NULL) OR (GRADE BRTWEEN 0 AND 100)
教学重点:
检查点技术
并发操作、封锁带来的若干问题,并发调度的可串行化。
SQL中完整性约束的实现:断言、触发器技术。 安全性中的授权语句。
§1
事务的概念
一、事务的定义 形成一个逻辑工作单元的数据库操作的汇集, 称为事务(transaction)。
例:在关系数据库中,一个事务可以是一条SQL语句、

数据库第8章习题参考答案

数据库第8章习题参考答案

第8章习题参考答案2.求程序的运行结果(1)Public Sub 习题8_2_1()Dim i As IntegerDebug.Print Tab(10); "*"For i = 1 To 5Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iFor i = 4 To 1 Step -1Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iDebug.Print Tab(10); "*"End Subrun:***** * ** * ** * ** * ** * ** * ** * *****(2)Public Sub 习题4_2_2()Dim x, y, i As Doublex = 0: y = 0For i = 1 To 8If i Mod 2 <> 0 Thenx = x - iElsey = y + iEnd IfNextDebug.Print "i="; iDebug.Print "x="; xDebug.Print "y="; yEnd Subrun:x=-16y= 20(3)Public Sub习题4_2_3()Dim m, s, k As Doublem = 28s = 0k = 1Do While k <= Int(m / 2)If Int(m / k) = m / k ThenDebug.Print ks = s + kEnd Ifk = k + 1LoopDebug.Print "s="; sEnd Subrun:124714s= 28(4)Public Sub 习题8_2_4()Dim n, a1, a2, a3, i As Doublen = Val(InputBox("请输入n,要求n>=3"))If n <= 2 ThenExit SubEnd Ifa1 = 1a2 = 1Debug.Print a1; a2For i = 2 To n - 1a3 = a1 + a2a1 = a2a2 = a3Debug.Print a3NextEnd Sub1 12353.改错题(1)Public Sub 改错8_3_1()Dim i, n, s As Doublen = Val(InputBox("请输入n"))i = 2: s = 1Do While i <= ns = s + ii = i + 1LoopDebug.Print "S="; sEnd Sub(2)Public Sub 改错8_3_2_求分式多项和()Dim nm, n, k ,p As integerDim y As Doublenm = Val(InputBox("请输入计算公式1后面的项目数目个数")) n = 1: p = 1: y = 1Do While n <= nmk = 2 * n + 1p = p * (k - 1) * ky = y + ((-1) ^ n) / pn = n + 1LoopDebug.Print "y="; yEnd Sub4.编程题(1)用if……else语句编程Public Sub分段函数1()Dim x, y, z As Doublex = Val(InputBox("请输入x的值:"))y = Val(InputBox("请输入y的值:"))If x > y And y <> 0 Thenz = x / yElseIf x = y Thenz = x * y * Sgn(y)Elsez = x + yEnd IfDebug.Print "x="; xDebug.Print "y="; yDebug.Print "z="; zEnd Sub(1)用select case语句结构编程Public Sub分段函数2()Dim x, y, z, a As Doublex = Val(InputBox("请输入x"))y = Val(InputBox("请输入y"))a = y - xSelect Case aCase Is > 0z = x + yDebug.Print zCase 0z = x * y * Sgn(y)Debug.Print zCase ElseIf y <> 0 Thenz = x / yDebug.Print zElseDebug.Print "z没有值"End IfEnd SelectEnd Sub(2)Public Sub 求解一元二次方程()Dim a, b, c As IntegerDim d, x1, x2, x3, x4 As Doublea = Val(InputBox("请输入a的整型数:"))b = Val(InputBox("请输入b的整型数:"))c = Val(InputBox("请输入c的整型数:"))d = b * b - 4 * a * cIf d > 0 Thenx1 = (-b + Sqr(d)) / (2 * a)x2 = (-b - Sqr(d)) / (2 * a)Debug.Print "x1="; x1, "x2="; x2Else if d=0 thenx3 = -b / (2 * a)x4 = -b/ (2 * a)Debug.Print "x3=";x3Debug.Print "x4=";x4ElseDebug.Print "方程没有实数解"End IfEnd Sub(3--1)用无条件转向语句GOTO编程Public Sub 数字与星期的转换1()Dim num As Integer10 num = Val(InputBox("请输入整数值:")) If num = 0 ThenDebug.Print "这是星期日"ElseIf num = 1 ThenDebug.Print "这是星期一"ElseIf num = 2 ThenDebug.Print "这是星期二"ElseIf num = 3 ThenDebug.Print "这是星期三"ElseIf num = 4 ThenDebug.Print "这是星期四"ElseIf num = 5 ThenDebug.Print "这是星期五"ElseIf num = 6 ThenDebug.Print "这是星期六"ElseIf num = -1 ThenDebug.Print "程序运行结束"EndElseDebug.Print "输入数据错误!"GoTo 10End IfEnd Sub(3--2)Public Sub数字与星期的转换2 ()Dim x As IntegerDo While Truex = Val(InputBox("请输入数字"))If x = 0 ThenDebug.Print "这是星期日"Exit DoElseIf x >= 1 And x <= 6 ThenDebug.Print "这是星期" + Str(x)Exit DoElseIf x = -1 ThenExit DoElseMsgBox ("输入数据错误!")End IfLoopEnd Sub(4)Public Sub 行李重量计费()Dim an, cn, weight, s_w, distance, fee As Doublean = Val(InputBox("请输入成年人数量"))cn = Val(InputBox("请输入未成年人数量"))weight = Val(InputBox("请输入行李重量"))distance = Val(InputBox("请输入距离"))s_w = weight - 20 * an - 10 * cnIf s_w <= 0 Thenfee = 0ElseIf distance / 100 = Int(distance / 100) Thenfee = 0.2 * s_w * (distance / 100)Elsefee = 0.2 * s_w * (Int(distance / 100) + 1) End IfEnd IfDebug.Print feeEnd Sub(5)Public Sub 求自然数的多项式和()Dim n, s As Integers = 0For n = 1 To 10s = s + (s + n)NextDebug.Print "S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)="; s End SubRun:S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)= 2036Public Sub 求多项自然数阶乘的和()Dim s, t As SingleDim n As Integert = 1s = 0For n = 1 To 20t = t * ns = s + tNextDebug.Print "1!+2!+3!+...+20!="; sEnd SubRun:1!+2!+3!+...+20!= 2.561327E+18(6)Public Sub 既能被3整除又能被5整除正整数个数() Dim i, x As Integerx = 0For i =100 To 200If i / 3 = Int(i / 3) And i / 5 = Int(i / 5) ThenDebug.Print ix = x + 1End IfNextDebug.Print "x="; xEnd SubRun:120135150165180195x= 7(7)Public Sub 输出直角三角形图案1()Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 4Debug.Print Tab(20); "*";For j = 1 To (2 * i - 2)Debug.Print "*";NextDebug.PrintNextEnd SubRun:****************Public Sub 输出直角三角形图案2() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextDebug.Print Tab(20); "*";For i = 1 To 4Debug.Print Tab(19 - i); "*";For j = 1 To (i + 1)Debug.Print "*";NextDebug.PrintNextEnd SubRun:*******************Public Sub 输出平行四边形图案() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 5Debug.Print Tab(21 - i);For j = 1 To 6Debug.Print "*";NextDebug.PrintNextEnd SubRun:******************************(8)Public Sub 求选手获得的平均分()Dim score(1 To 11), minno, maxno, sum, aver As Single Dim i As Integerminno = 1maxno = 1sum = 0For i = 1 To 10score(i) = Val(InputBox("请输入选手的成绩值:")) Debug.Print score(i)NextFor i = 2 To 10If score(i) < score(minno) Thenminno = iEnd IfIf score(i) > score(maxno) Thenmaxno = iEnd IfNext iFor i = 1 To 10sum = sum + score(i)Next isum = sum - score(minno) - score(maxno)aver = sum / 8Debug.Print "该选手的平均分是:"; averEnd Sub(9)关于素数的求解(9-1)求100之内的所有素数Public Sub 求所有素数之和()Dim s, w, n As Integers = 0For w = 2 To 99 Step 2For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNextIf n > Sqr(w) Thens = s + wEnd IfDebug.Print "S="; sNextEnd Sub(9-2)Public Sub 求200以内的所有素数()Dim w, n As IntegerDebug.Print "200 以内的所有素数是:" For w = 2 To 199For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNext nIf n > Sqr(w) ThenDebug.Print w;End IfNextDebug.PrintEnd Sub(10)Public Sub 求水仙花数1()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For i = 1 To 9For j = 0 To 9For k = 0 To 9n = i * 100 + j * 10 + kIf n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNext kNext jNext iDebug.PrintEnd SubPublic Sub 求水仙花数2()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For n = 150 To 999i = Int(n / 100)j = Int(n / 10 - i * 10)k = n Mod 10If n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNextDebug.PrintEnd Subrun:水仙花数是:153 370 371 407(11)Public Sub 求分数数列和()Dim i, t, n As IntegerDim a, b, s As Singlen = 20a = 2:b = 1: s = 0For i = 1 To ns = s + a / bt = aa = a + bb = tNextDebug.Print "sum="; s;End Sub(12)Public Sub N年达到的利息()Dim y As IntegerDim interest1,interest As DoubleP=10000y = 0interest = 0Do Until interest >= 1000Interest1 =2*p* 0.0225 *(1-0.2) ‘一期2年整存整取扣税后的利息p=p+interest1 ‘扣税后的利息加上本金成为新一期的本金Interest=p-10000 ‘存款以来实际所的利息y = y + 2Debug.Print interest, yLoopEnd SubRun:360 2732.959999999999 4 1119.34656 6。

《数据库》第八章 多表连接及子查询

《数据库》第八章 多表连接及子查询
右外连接的两个表之间是有主从关系的,右外连接中右表或 者说写在逗号或者join后面的为右表,运行结果中将包含所 有右表中的记录,左表记录根据匹配关系补充右表信息,如 无关联记录则置NULL处理(如需加索引,请在左表上与右表 关联的公共列上加索引,详见下面章节)。
例:查询出学生信息与院系信息相关连的查询结果集, 要求学院信息是全部的,学生信息作为补充。
SQL> SELECT t1.s_id, t1.s_name,c_id,t2.c_name FROM t_student t1 LEFT OUTER JOIN t_college t2 USING (c_id);
19
Inspur Education
外部连接-右外连接
右外连接(RIGHT [OUTER] JOIN):
这类连接实际应用场景较等值连接来说较为少见,例 :查询一下学生自修课程数大于院系平均自修课程数 的学生与院系的相关信息。
SQL> SELECT t1.s_id, t1.s_name, t2.c_name, t1.s_course FROM t_student t1, t_college t2 WHERE t1.s_course > t2.c_course_avg AND t1.c_id = t2.c_id;
right [outer] join子句+on子句连接
SQL> SELECT t1.s_id, t1.s_name,t2.c_id,t2.c_name FROM t_student t1 RIGHT OUTER JOIN t_college t2 ON t1.c_id = t2.c_id;
right [outer] join子句+using子句连接
公共列是两个或更多表中存在相同数据的列,比如, t_student表和t_college表都包含一个c_id的公共列 。这里的公共列的列名不必一致,主要是存放的数据 要有一定的相关性,甚至是业务上的同类数据。

数据库原理与设计第8章 数据库管理PPT课件学案

数据库原理与设计第8章 数据库管理PPT课件学案

8.1数据库的安全性
数据库的安全性是指保护数据库以防止不合法的使用 所造成的数据泄漏、更改或破坏。
安全性的问题涉及到许多方面,其中包括: ●法律、社会和伦理方面的问题,例如请求查询人是不是有合法的权 限; ●物理控制方面的问题,例如机房的保护措施; ●政策方面的问题;如公安监察等系统人员允许存取指定的数据; ●允许方面的问题,如使用口令保密问题; ●硬件控制方面的问题,如CPU的安全性; ●操作系统的安全性问题;如Windows和Linux/Unix的本身安全; ●数据库系统本身的安全性问题;
6

8.1.2安全性级别
访问控制是对用户访问数据库各种资源(表、视图、系统目录、使用程序 等)的权限(包括创建、查询、修改、删除、执行等)的控制。也就 是说,用户必须获得对数据库对象(比如表、视图等)的操作权限, 才能在规定的权限之内操作数据库。 按用户权限的大小,一般可将用户划分为如下三类。 1.具有DBA特权的数据库用户 2.支配部分数据库资源特权的数据库用户 3.一般数据库用户
5
8.1.1安全性控制
4.数据加密 数据加密是防止数据库中数据在存储和传输中失密的有效手段,通常采 用的加密方式有替换加密,就是使用密钥将文中的每一个字符转换成密 文中的字符。还有一种就是转换加密。就是将文中的字符按不同的顺序 重新排列。在实际当中通常会将两者结合起来使用,以达到更高的安全 程度,而且现在已经有了各种各样的加密算法。 5.审计 审计功能把用户对数据库的所有操作自动记录下来放入审计日志(Audit log)中。DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一 系列事件,找出非法存取数据的人、时间和内容等。 审计通常是很费时间和空间的,会大大增加系统地开销,所以DBMS往往 都将其作为可选特征,允许DBA根据应用安全的要求,灵活地打开或关闭 审计功能。

第八章 数据库并发控制练习和答案

第八章 数据库并发控制练习和答案

第八章数据库并发控制一、选择题1.为了防止一个用户得工作不适当地影响另一个用户,应该采取( )。

A、完整性控制B、访问控制C、安全性控制D、并发控制2、解决并发操作带来得数据不一致问题普遍采用()技术。

A、封锁B、存取控制C、恢复D、协商3.下列不属于并发操作带来得问题就是( )。

A、丢失修改B、不可重复读C、死锁D、脏读4.DBMS普遍采用( )方法来保证调度得正确性。

A、索引B、授权C、封锁D、日志5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这就是()。

A、一级封锁协议B、二级封锁协议C、三级封锁协议D、零级封锁协议6.如果事务T获得了数据项Q上得排她锁,则T对Q( )。

A、只能读不能写B、只能写不能读C、既可读又可写D、不能读也不能写7。

设事务T1与T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作() .A、T1正在写A,T2要读AB、T1正在写A,T2也要写AC、T1正在读A,T2要写AD、T1正在读A,T2也要读A8。

如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突得操作就是() .A、一个就是DELETE,一个就是SELECTB、一个就是SELECT,一个就是DELETEC、两个都就是UPDATED、两个都就是SELECT9.在数据库系统中,死锁属于()。

A、系统故障B、事务故障C、介质故障D、程序故障二、简答题1、在数据库中为什么要并发控制?答:数据库就是共享资源,通常有许多个事务同时在运行。

当多个事务并发地存取数据库时就会产生同时读取与/或修改同一数据得情况.若对并发操作不加控制就可能会存取与存储不正确得数据,破坏数据库得一致性。

所以数据库管理系统必须提供并发控制机制。

2、并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致得情况?答: 并发操作带来得数据不一致性包括三类:丢失修改、不可重复读与读“脏”数据.(1)丢失修改(LostUpdate)两个事务T1与T2读入同一数据并修改,T2提交得结果破坏了(覆盖了)T1提交得结果,导致T1得修改被丢失。

第8章 数据库系统的概要设计

第8章 数据库系统的概要设计

2.数据库概念结构设计的方法 概念模型是数据模型的前身,它比数据模型更独立于机器、更 抽象,也更加稳定。概念设计的方法有以下4种: (1)自顶向下的设计方法。 该方法首先定义全局概念结构的框架,然后逐步细化为完整的全 局概念结构。 (2)自底向上的设计方法。 即首先定义各局部应用的概念结构,然后将它们集成起来,得到 全局概念结构的设计方法。 (3)逐步扩张的设计方法。 此方法首先定义最重要的核心概念结构,然后向外扩充,生成其 他概念结构,直至完成总体概念结构。 (4)自顶向下与自底向上相结合的方法。 最常采用的策略是自底向上的方法,即自顶向下地进行需求分析, 然后再自底向上地设计概念结构,其方法如图8-1所示。其中,概 念模式对应于概念模型。
8.1.2 数据库系统的概要设计
对于基于结构化的数据库系统开发方法而言,数据库系统在完成 需求分析之后应进入数据库系统的概要设计阶段,此阶段不仅需要 进行数据库概念结构设计(也可简称数据库概念设计)工作,即数 据库结构特性设计;而且还需要确定数据库系统的软件系统结构, 进行模块划分,确定每个模块的功能、接口以及模块间的调用关系, 即进行数据库行为特性的设计过程。 数据库概念结构设计是将系统需求分析得到的用户需求抽象为 信息结构过程。只有将系统应用需求抽象为信息世界的结构,也就 是概念结构后,才能转化为机器世界中的数据模型,并用DBMS实现 这些需求。
成 批 成 绩 单 录 入
打 印 班 级 成 绩
打 印 成 绩 统 计 表
图8-19 成绩管理系统层次图
8.4.2
IPO图
IPO图(input process output图)输入—处理—输出图是在层 次结构图的基础上推出的一种描述系统结构和模块内部处理功能 的工具。在总体设计、详细设计、设计、评审、测试和维护的不 同阶段,都可以使用IPO图对设计进行描述。如下图所示的IPO图 :

数据库第八章

数据库第八章

数据库第八章数据库第八章介绍了关系数据库中的事务管理和并发控制技术。

事务是相关操作的集合,作为一个单独的逻辑工作单元执行,要么全部完成,要么全部回滚。

并发控制是为了保证多个事务并发执行时,数据库的一致性和可靠性。

1. 事务管理1.1 事务的特性一个事务必须满足ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

- 原子性:事务是一个不可分割的工作单元,要么全部执行成功,要么全部回滚。

- 一致性:事务执行结束后,数据库应处于一致状态。

- 隔离性:在并发执行的事务中,每个事务之间应该互不干扰,保证每个事务都认为自己是独占数据库的。

- 持久性:事务提交后,对数据库的修改应该永久保存。

1.2 事务的调度与控制事务的调度与控制是通过事务管理器完成的。

事务管理器负责事务的提交、回滚和并发控制。

它使用锁机制来实现隔离性和并发控制。

2. 锁与并发控制2.1 锁的基本概念锁是数据库中实现并发控制的重要机制。

它能够保证多个事务并发执行时的数据一致性。

锁分为共享锁和排他锁两种类型,分别用于读操作和写操作。

- 共享锁(S锁):多个事务可以同时获取共享锁,用于读取数据。

- 排他锁(X锁):只有一个事务可以获取排他锁,用于更新数据。

2.2 锁的粒度锁的粒度决定了锁定的范围。

常见的锁粒度包括表级锁、页级锁、行级锁。

行级锁具有最细的粒度,对并发性能的影响最小,但也带来了额外的开销。

2.3 两段锁协议两段锁协议是一种常见的并发控制协议,包括加锁阶段和解锁阶段。

在加锁阶段,事务申请和释放锁;在解锁阶段,事务提交或回滚时释放锁。

两段锁协议可以保证事务的并发执行,同时保持数据库的一致性。

3. 并发控制技术3.1 串行化串行化是一种简单有效的并发控制技术,通过限制同时执行的事务数目为1来保证一致性。

但是串行化对并发性能的影响较大,效率较低。

3.2 封锁协议封锁协议是一种基于锁的并发控制技术,通过给事务加锁来控制并发访问。

数据库技术第八章

数据库技术第八章
2013-7-9
第8章 数据库完整性及SQL Server的完整性控制
完整性规则 完整性子系统是根据“完整性规则集”工作的。完整性规则集 是由DBA或应用程序员事先向完整性子系统提出的有关数据约束的 一组规则。 每个完整性规则有三个部分组成: (1) 什么时候使用规则进行检查(称为规则的“触发条件”); (2) 要检查什么样的错误(称为“约束条件”); (3) 若检查出错误,应该怎样处理(称为“ELSE”子句)。
2013-7-9
第8章 数据库完整性及SQL Server的完整性控制
8.2.3 规则 规则也是一种数据库对象,与默认的使用方法类似,规则可以 绑定到表的一列或多列上,也可以绑定到用户定义的数据类型上。 它的作用与CHECK约束的部分功能相同,为INSERT和UPDATE语句限 制输入数据的取值范围。 规则与CHECK约束的不同之处在于: CHECK约束是在使用CREATE TABLE语句建表时指定的,而规则 是作为独立于表的数据库对象,通过与指定表或数据类型绑 定来实现完整性约束。 在一列上只能使用一个规则,但可以使用多个CHECK约束。 规则可以应用于多个列,还可以应用于用户自定义的数据类 型,而CHECK约束只能应用于它定义的列。
第8章 数据库完整性及SQ制 8.2 SQL Server的数据完整性及其实现 8.3 案例6:活期储蓄管理系统 数据库的完整性控制
2013-7-9
第8章 数据库完整性及SQL Server的完整性控制
数据库的完整性是指数据的正确性、有效性和相容性, 防止错误数据进入数据库,保证数据库中数据的质量。正 确性是指数据的合法性;有效性是指数据是否属于所定义 的有效范围;相容性是指描述同一现实的数据应该相同。 数据库是否具备完整性涉及到数据库系统中的数据是否正 确、可信和一致,保持数据库的完整性是非常重要的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.4 恢 复
8.4.1 故障的种类
一.事务内部的故障
事务故障意味着事务没有达到预期的终点,因此数据 库可能处于不正确状态.系统就要滚回此事务,即撤销该事 务已经作出的任何对数据库的修改,使得该事务好象根本 没有启动一样.
二.系统范围内的故障
三.介质故障
四.计算机病毒
8.4.2 转储和恢复
转储是数据库恢复中采用的基本技术。所谓转储,即DBA定期 将数据库复制的磁带或另一个磁盘上保存起来的过程。
S
S# SN SA SD
I.AUTR(P.).WP I. N A M D
b. 将对关系S的四种存取权限授予用户WP.
S
S# SN
I.AUTR.WP I.
NA
SA SD MD
c. 任意一个学生可以读SC关系中关于自己的元组.
SC
S# C# G
I.AUTR(P.). Z I. Z
CZ GZ
d. 用户可以插入成绩在90分以上的SC元组.
二. QBE系统
QBE系统可授予用户四种权限,即插入(I)、删除(D)、更新(U)和 检索(P).系统同样用表格的形式规定安全性约束条件.某一关系的所 有者在关系框架中输入一个元组.
1. 授权格式: I . AUTR (<表>), <名字> I .
2.举例: a. 将检索关系S的权限授予用户WP.
关系 S 关系 S 关系 C SC.G SC.S# SC.C# ……
SELECT UPDATE ALL UPDATE SELECT SELECT ……
3.依赖于数据对象的内容的授权
用户名 WANGPIN ZHANGMIN ZHANGMIN ……
表 8-3
数据对象名 允许的操作类型
关系 S
SELECT
二.产生死锁的原因及解决方法 1.产生死锁的原因 2.解决死锁的方法 (1).要求每个事务一次就将所有要使用的数据全部加锁,否则
就不能执行. (2).预先规定一个封锁顺序,所有的事务都必须按这个顺序对
数据执行封锁. (3).诊断死锁,解除死锁.
注意时间
8.3.4 可 串 行 性
计算机系统对并行操作的调度是随机的,不同的调度会 产生不同的结果.哪个结果是正确的呢?
图 8-1
OS
DB
操作系统安全保护 密码存储
一. 用户标识和鉴定 1. 用一个户用名或者用户标识符号来标明用户身份. 2. 口令(Password). 3. 计算结果.
二.存取控制
1.用户权限
2. 与数据无关的授权定义
表8-2 一个可能的授权定义表的形式
用户名
数据对象名 允许的操作类型
WANGPIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ZHANGMIN ……
8.3 并 发 控 制
8.3.1 基本概念
一. 事务的概念 二. 数据一致性级别的概念
T1
T2
T1 T2
①读A=16

读A=16
③A=A-1 写回A=15

A=A-1
写回A=15
(a) 丢失修改
①读A=50
读B=100
求和=150

读B=100
求B=B*2
写回B
③读A=50
读B=200
求和=250
除开用子模式外,DBTG系统还提供了一整套以存取控制锁与 存取控制码为基础的安全设施。
1. 存取控制锁子句格式
ACCESS CONTROL LOCK [FOR || 某些 DML 语句|| ]IS
literal-1
literal-2
lock-name-1
OR lock-name-2
……
PROCEDURE db-proc-1
比标准的SELECT语句有两点扩充. 例1. 每当在学生选课SC表中加入一个记录时,保证C#与课程表 C中的某个C#相同,S#与学生表S中的某个S#相同.
在SC表对应的块上定义一个pre-insert触发器.
SELECT ‘X’
FROM S,C
WHERE S.S# =:SC.S# AND C.C# =:SC.C#;
(1). 在执行插入、更新操作时要保证所有学生年龄不小于15岁.
S
S# SN SA SD
I. CONSTR(I.U.) I.
≥15
图8-7
(2). 所插入的学生选课元组中学生所选的课程必须为学校开设 的课程.
SC
S# C#
G
I. CONSTR(I.) I.
ALL.CX
C
C#
CN PC#
ALL.CX
图8-8
三.建立不同的约定,形成不同级别的封锁协议
表 8-5 不同级别的封锁协议
X锁
S锁
一致性保证
立 结 立 结 不丢失 事务可 不读 可重复 即 束 即 束 修改 恢复 ‘脏’ 读
数据
1



2
√√









四.封锁尺度(granularity)
8.3.3 活锁和死锁
一.活锁产生的原因和解决方法 1.活锁产生的原因 2.避免活锁的方法
PROCEDURE db-proc-2
2. 有关说明:
(1).格式中的DML语句按条目而异。如:
①对于域来说DML语句为READY;
②对于记录则DML语句为STORY;
③对于系则DML语句为CONNECT,DISCONNECT。
(2). LOCK 有三种形式
3.存取控制码的作用 KEY值是在用户程序中给出的. 如在模式中对记录S有如下规定: RECORD NAME IS S. ….. ACCECC CONTROL LOCK FOR ERASE IS ‘ENRMT’. …….
T1 T2 X
S

X
N
N
Y
S
N
Y
Y

Y
Y
Y
图8-11 封锁类型的相容矩阵
二.利用封锁机制解决事务并发操作带来的相关问题 1.封锁机制执行并发控制时的约定 (1).事务T在读、写数据对象R时首先要发出Slock或Xlock请求, 事务T获得所要的锁后才能读、写R. (2).事务T结束时才释放锁. 2.利用封锁机制解决图8-10中的三个问题.(图8-12)
例2. 只能删除没有选课的学生. 在S表对应的块上定义一个pre-delete触发器: SELECT ‘X’ FROM SC WHERE SC.S# =:S.S#
例3. 计算机系的学生年龄在16岁到25岁之间. 在S表对应块的年龄字段上定义一个post-change触发器: SELECT ‘X’ FROM DUAL WHERE :S.SD =‘CS’ AND :S.SA BETWEEN 16 AND 25;
二. 静态约束和动态约束 1.静态约束 2.动态约束
三. 立即执行约束和延时执行约束 1.立即执行约束 2.延时执行约束
完整性的实现应包括两个方面,一是系统要提供定义完整性约束 条件的功能,二是提供检查完整性约束条件的方法.
8.2.2 两个系统的完整性方法
一. QBE系统
1. 定义关系S中各属性值的类型、长度,定义关系的码是哪个 (些)属性:
二. ORACLE 系统
ORACLE系统中实现完整性控制的两个途径 1. 字段的有效性说明 2. 定义触发器
(1)触发器的三个级别 (2)触发的五种事件
①.进入时 ②.查询 ③.修改 ④.退出 ⑤.按键
(3). 触发器中所用的SELECT语句格式 SELECT 目标列 [INTO :[块名.]字段] FROM 表名 [WHERE 子句] [GROUP BY 子句]
一、静态转储 二、动态转储
8.4.3 日志文件
日志文件是用来记录对数据库每次更新活动的文件. 一. 登记日志文件 “先写日志文件”,然后写数据库的原则. 二. 事务恢复
那么在用户程序中就要提供相同的KEY值: PROCEDURE DIVISION. DECLARATIVE S ……USE FOR ACCESS CONTROL ON ERASE FOR S. MOVE ‘ENRMT’ TO DB-ACCESS-CONTROL-KEY END DECLARATIVE S. …… MOVE ‘S5’ TO SNO IN S. FIND ANY S. ERASE S ……
S
S#
SN
SD
I. TYPE. I.
CHAR CHAR CHAR
I. LENGTH. I.
5
20
15
I. KEY.
I.
K
NK
NK
图8-6
2. 对于其它的约束条件则在关系名下输入: I. CONSTR (<条件表>) I.
条件表可以包括I.(插入),D.(删除),U.(更新)中的任何一个或全部.
3.举例
(b) 不能重复读
T1
T2
①读C=100
C=C*2 写回C

读C=200
③ ROLLBACK C恢复为100
(c) 读脏数据
图8-10
8.3.2 封锁(Locking)
一.基本的封锁类型 1.排它锁(Exclusive locks),简记为X锁 2.共享锁(Share locks),简记为S锁
可以用相容矩阵(图8-11)来表示这些控制方式.
例如: T1的封锁序列是: S lock A…S lock B…X lock C…Un lock B…Un lock A…Un lock C;
T2的封锁序列是: S lock A…Un lock A…S lock B…X lock C…Un lock C…Un lock B;
相关文档
最新文档