赞
踩
科目 | 题型 | 数量 | 总分 | 合格标准 |
---|---|---|---|---|
基础知识 | 单选 | 75×1´=75 | 75 | 45 |
应用技术 | 案例分析(填空、简答) | 5×15=75 | 75 | 45 |
~
12:30或14:30~18:30运算器
累加寄存器(AC)
:也称累加器
,当算术逻辑单元ALU执行运算时,为其提供一个工作区。
控制器
指令寄存器(IR)
:用来暂时存放一条指令,由指令译码器根据指令寄存器中的内容产生各种微操作指令,控制其它部分协调工作。程序计数器(PC)
:存放的是将要执行的下一条指令的地址
。地址寄存器(AR)
:保存当前CPU所访问的内存单元的地址。由于内存和CPU存在操作速度上的差异,所以需要使用AR保存地址信息,直到内存读/写操作完成为止。寄存器组
总线
数据总线(DB)
地址总线(AB)
控制总线(CB)
简化了系统结构
,便于系统设计制造;减少了连线数目
,便于布线,减小体积,提高系统的可靠性;接口设计
,所有与总线连接的设备均采用类似的接口;系统的扩充. 更新与灵活配置
,易于实现系统的模块化;故障诊断和维修
,同时也降低了成本
。程序控制方式
中断方式
CPU不等待,也不执行程序去查询外设的状态,而是由外设在准备好以后,向CPU发出中断请求信号通知CPU,CPU收到中断请求信号以后,保存正在执行程序的现场,转入I/O中断服务程序的执行,然后再返回到被打断的程序继续执行
。中断向量
中断服务程序的入口地址
中断响应时间
发出中断请求
到开始进入中断处理程序
直接内存存取(DMA) 方式
主存和外设之间直接进行
,不需要CPU的干预
,只需要CPU在过程开始和结束时发出一些命令,实际操作是由DMA硬件直接执行完成的,CPU在传送的过程中可以处理别的任务。通道方式和外围处理机方式
指令周期
执行一条指令所需要的时间
。振荡周期
,是计算机中最基本的、最小的时间单位
。把CPU通过总线对存储器或I/O接口进行一次访问所需要的时间
称为一个总线周期。机器周期
。CPU的操作速度快,但访问内存的速度却慢得多,我们把从内存读取一条指令的最短时间
,称之为机器周期。宏观
按照处理机数量
分类
微观
按照并行程度
分类
流水线周期
执行时间最长
的(最慢的)子任务的执行时间。Tn=执行一条指令所需时间+(n-1)*流水线周期
最长子过程所用时间的倒数
。内容是主存局部域的副本
。CPU工作时给出的是主存的地址,要从Cache存储器中读写信息,就需要将主存地址转换成Cache存储器的地址,这种地址的转换叫作地址映像。
该转换工作由硬件完成
以下3种发生块冲突次数最多的是直接映像,最少的是全相联映像
(1)直接映像
访问速度快
。*
1024/512=32,所以块的范围是 0~31,n=31*
1024/16=64,所以分区范围是 0~63,M=63(2) 全相联映像
只有在Cache中的块全部装满后才会出现冲突,Cache利用率高
。*
1024/512=32,所以块的范围是 0~31,n=31*
1024*
1024/512=2048,所以分区范围是 0~2047,M=2047(3) 组相联映像
组采用直接映像方式
而块采用全相联映像方式
。主存的任何区的0组只能存到Cache的0组中,1组只能存放到1组中,依此类推。而组内的块可以存入Cache中相同组的任一块中。*
1024/512=32,再将每两块分为1组,则Cache中的块为16组(0~15)*
1024/16=64,所以区为64(0~63),1*
1024*
1024/64/512=32,每组两个块,所以每个区又分为16组(0~15)Cache的性能分析:
*
t1+(1-H)*
t2虚拟存储器
逻辑
存储器主存-辅存
两级存储器组成相联存储器
按内容访问
的存储器RC-5
大量的明文消息
进行加密传输非对称加密技术
不适合于对文件加密
,而只适用于对少量数据加密
。RSA
,基于大素数分解的困难性。加密模型
和认证模型
。MD2. MD4和MD5
是被广泛使用的Hash函数,它们产生一种128位
的信息摘要。数字签名
确认信息发送者的身份
和信息是否被修改过
。不能保证发送信息的保密性
。数字加密
数字签名
使用的是发送方的密钥对
,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。数字加密
使用的是接收方的密钥对
,是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送数据,但只有唯一拥有接收方私有密钥的人才能对信息解密
。数字签名
只采用了非对称加密算法
,它能保证发送信息的完整性. 身份认证和不可否认性
,但不能保证发送信息的保密性。数字加密
采用了对称密钥算法和非对称密钥算法相结合
的方法,它能保证发送信息的保密性
。(1) 计算机系统的可靠性
(2) 计算机系统的失效率
(3) 平均无故障时间(MTBF)
(4) 计算机系统的可维修性
(5) 计算机系统的可用性
串联系统的可靠性
并联系统的可靠性
下面的可靠性
机器语言和汇编语言
。面向各类应用的程序语言
。Java. C. C++. Python. PHP、JavaScript
等等。
便于理解
,提高了程序设计的效率。高级程序语言必须进行翻译才能为计算机硬件所理解
,常用的翻译方式有汇编、解释和编译
。汇编语言
编写的:需要汇编程序
翻译成目标程序
,然后执行目标程序。高级语言
编写的:需要解释程序或编译程序
进行翻译
,然后再运行。解释程序(解释器)
编译程序(编译器)
编译阶段
:把源程序翻译成目标程序。运行阶段
:执行目标程序。解释方式
下
不生成独立的目标程序
解释方式比编译方式更灵活
,解释方式可移植性好
编译方式
下
翻译成独立保存的目标程序
编译比解释方式可能取得更高的效率
常量和变量
程序运行时数据的值能否改变
,将程序中的数据分为常量和变量。数据的作用域范围
,可将其分为全局变量和局部变量。全局变量
静态数据区
分配不改变
的局部变量
动态改变
的。整型. 字符型. 实型和布尔类型
。空类型
。枚举类型
。数组、结构、联合
。type *
。类类型
。顺序结构
选择结构
循环结构
词法
分析:识别出一个个“单词” 符号
。“单词” 符号是程序设计语言的基本语法单位,如关键字(保留字) . 标识符. 常数. 运算符和标点符号. 左右括号等。语法
分析:分析单词串是否构成短语和句子
,即是否为合法的表达式. 语句和程序等基本语言结构,同时检查和处理程序中的语法错误。语义
分析分析各语法结构
的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。类型分析和检查
。一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如:整除取余运算符只能对整型数据进行运算,如果运算对象为浮点数,则认为是一种类型不匹配的错误。后缀式(逆波兰式)、四元式(三地址码)、树形表示
(a+b)*c-d
-*+abcd
ab+c*d
(a+b)*c-d
计算顺序全部加上括号
:(((a+b)*c)-d)
每一对括号内的运算符移到括号前面
: -(*(+(ab)c)d)
所有括号去掉
:-*+abcd
(((a+b)*c)-d)
(((ab)+c)*d)-
ab+c*d-
传值调用
单向
的,只能将实参的值传递给形参,而形参不能再将值传递给实参。将实参的值传递给形参
。实参
可以是常量
(表达式),也可以是变量
(数组元素) 。例:int sum(int x, int y) {
int z;
z=x+y;
return z;
}
函数调用时:sum(2,3);
引用调用(传地址调用)
将实参的地址传递给形参
。双向
传递数据。只能是变量
(数组元素),而不能是常量
(表达式) 。例:void swap(int &x, int &y) {
int temp;
temp=x; x=y; y=temp
}
函数调用时:sum(a,b);
使用者
的关系环境
线性表的定义
线性表的顺序存储(顺序表)
优点:可以随机存取表中的元素,按序号查找元素的速度很快。
缺点:插入和删除操作需要移动元素。
线性表的链式存储(链表)
可以不连续
。节点空间只有在需要时才申请,无需事先分配
。优点:插入和删除操作不需要移动元素
缺点:只能按顺序访问元素,不能进行随机存取。
结点中指针信息的实现方式
,还有双向链表、循环链表和静态链表等链表结构
栈和队列都是一种特殊的线性表
栈
:先进后出
应用:表达式求值、括号匹配、函数调用、返回控制、递归过程转变为非递归过程
顺序栈:用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素。
存储空间是预先定义或申请的,因此可能会出现栈满的情况
链栈:用链表存储栈中的元素。
队列
:先进先出
,队尾入队头出。
应用:打印队列、层次遍历、离散事件的计算机模拟
顺序队列
循环队列
链队列
字符串是一串文字及符号的简称,是一种特殊的线性表。
字符串的基本数据元素是字符,常常把一个串作为一个整体来处理。
串是仅由字符构成的有限序列
,是取值范围受限的线性表
。
串名
,单引号括起来的字符序列是串值
。串长:即串的长度,指字符串中的字符个数。
空串
:长度为0的空串,空串不包含任何字符
。
空格串
:由一个或多个空格组成的串。
子串:由串中任意长度的连续字符构成的序列称为子串。
串相等:指两个串长度相等且对应位置上的字符也相同。
串比较:两个串比较大小时以字符的ASCII
码值作为依据。
顺序存储:用一组地址连续的存储单元来存储串值的字符序列。
链式存储:字符串可以采用链表作为存储结构,当用链表存储串中的字符时,每个结点中可以存储一个字符,也可以存储多个字符。
设每个数据元素占用L个单元,m. n为数组的行数和列数
,那么:
这里主要讨论一些特殊矩阵的压缩存储的问题。
对多个值相同的元素可以只分配一个存储单元,零元素不分配存储单元。
下面主要讨论对称矩阵. 三对角矩阵. 稀疏矩阵。
对称矩阵
三对角矩阵
稀疏矩阵
树是n(n≥0)个结点的有限集合。 当n=0时称为空树。 在任一非空树中,有且仅有一个称为根的结点:其余结点可分为m(m≥0)个互不相交的有限集T1,T2…,Tm,其中每个集合又都是一棵树,并且称为根结点的子树。
双亲、 孩子和兄弟
结点的度
叶子结点
内部结点
结点的层次
树的高度
有序(无序) 树
森林
哈夫曼树
,又称霍夫曼树
,是一类带权路径长度最短
的树。
带权路径长度
为树中所有叶子结点的带权路径长度之和。对字符集中的字符进行编码和译码
进行通信电文的编码和解码
二叉排序树
。 它或者是一棵空树,或者是具有如下性质的二叉树:
左子树
上所有结点的关键码值均小于根结点
的关键码值。右子树
上所有结点的关键码值均大于根结点
的关键码值。左、 右子树本身就是两棵二叉查找树
。一个图G(Graph) 是由两个集合:V和E所组成的,V是有限的非空顶点(Vertex) 集合,E是用顶点表示的边(Edge) 集合,图G的顶点集和边集分别记为V(G) 和E(G) ,而将图G记作G=(V,E)。
可以看出,一个顶点集合与连接这些顶点的边的集合可以唯一表示一个图。
在图中,数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
有向图
无向图
完全图
缩小增量排序
” ,是对直接插入排序方法的改进。要求
查找表进行顺序存储
并且按关键字有序排列
。几个圆圈
)几个往外的箭头
)看P的往外的箭头,若指向无资源的R,则阻塞
)看是否有非阻塞节点P,如有可以把非阻塞节点P的所有箭头删除
)运行
:当一个进程在处理机上运行时,则称该进程处于运行状态。就绪
:一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。阻塞
:也称等待
或睡眠
状态,一个进程正在等待某一事件发生而暂时停止运行。可拥有资源的独立单位
可独立调度和分配的基本单位
if((S=S-1)≥0)
继续执行本进程
else //(S=S-1)<0
挂起本进程(本进程等待),转到另一个进程
if ((S=S+1)>0)
不唤醒队列中的等待进程,继续执行本进程
else //(S=S+1)≤0
唤醒队列中的等待进程,同时继续执行本进程
v是通知,p是获取
,方便做题)
M =(k-1)×n+1
互斥条件. 请求保持条件. 不可剥夺条件、环路条件
。鸵鸟策略. 预防策略. 避免策略和检测与解除死锁
。可拥有资源的独立单位; 可独立调度和分配的基本单位
。线程
分为用户级
线程和内核
支持线程。相对地址
) :
绝对地址
)
页
。块
或页框
。中断处理程序. 设备驱动程序. 与设备无关的系统软件和用户级软件
先进行移臂调度,再进行旋转调度
。磁盘调度
的目标
是使磁盘的平均寻道时间最少
。读取磁盘数据的时间 = 寻道时间 + 旋转延迟 + 数据传输时间
一级目录结构
二级目录结构
多级目录结构
绝对路径
相对路径
下图选 c、a
在将文件保存到外存时,我们首先要知道哪些存储空间是“占用” 的,哪些存储空间是“空闲” 的。因此我们需要对磁盘空间进行管理。
常用的空闲空间的管理方法有空闲区表. 位示图. 空闲块链和成组链接法
。
空闲区表
位示图
空闲块链
成组链接法
先来先服务
短作业优先
响应比高优先
优先级调度算法
均衡调度算法
概念:是指网络中通信线路和节点的几何顺序,用以表示整个网络的结构外貌,反映各节点之间的结构关系。
常见的网络拓扑结构有总线型. 星型. 环型. 树型和分布式结构等。
总线型
星型
环型
树型
分布式
ARP
负责将IP
地址转换为物理
地址(MAC地址)RARP
负责将物理
地址转换为IP
地址。TCP
协议一般用于传输数据量比较少,且对可靠性要求高的场合。TCP
是面向连接的. 可靠的
,但是它是以牺牲通信量来实现的,也就是会降低传输速率。如果传输的数据量不多
,对传输速度要求不高
,但是对可靠性要求较高
的时候,则用TCP。UDP
是无连接的. 不可靠的
,但是它可以实现高速传输。如果传输的数据量大
,要求传输速度快
,但对可靠性要求不高
,或者已知网络是可靠的情况下,可以用UDP。建立在UDP之上
,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。FTP(File Transport Protocol 文件传输协议)
运行在TCP之上
,是通过Internet将文件从一台计算机传输到另一台计算机的一种途径。控制信息
(使用21
端口),另一条用于传送文件内容
(使用20
端口) 。SFTP(SSH File Transfer Protocol 安全文件传输协议)
安全
方法,它要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH
) 进行,不传输明文密码或文件数据。建立在TCP之上
,默认端口号22
。Telnet(远程登录协议)
建立在TCP之上
,使用23
端口。HTTP(Hypertext Transfer Protocol 超文本传输协议)
建立在TCP之上
。HTTPS(Hypertext Transfer Protocol Secure 超文本传输安全协议)
自动分配IP地址
进行域名解析
的,域名虽然便于人们记忆,但是机器只能识别IP地址,它们之间的转换工作称为域名解析。子网掩码
网络号用1表示,主机号用0表示
。例如,C类IP地址的子网掩码默认为255.255.255.0,即:2的6次方
)个子网
(6=26-20)2的6次方-2
)个主机地址
(6=32-26)FF05:0:0:0:0:0:0:B3
→ FF05::B3
0:0:0:0:0:0:128.10.1.1
→ ::128.10.1.1
主动攻击与被动攻击
重放
拒绝服务(DOS)
社会工程学攻击
SQL注入攻击
处于网络层和数据链路层
,一般有一个包检查块(包过滤器),通过该检查模块,对每一个传入和传出网络的IP包打开进行检查,例如源地址、目的地址、协议和端口等,对于不符合包过滤规则的包进行记录,发出报警并丢弃该包。对用户完全透明,速度较快
。包过滤通常被包含在路由器数据包中
,所以不需要额外的系统来处理。访问控制粒度太粗糙
,不能防范黑客攻击,不能处理新的安全威胁。外模式
用户模式或子模式
概念模式
模式
内模式
存储模式
概念数据模型
信息模型
按用户的观点对数据和信息建模
,是现实世界到信息世界的第一层抽象
,强调其语义表达功能,易于用户理解
,是用户和数据库设计人员交流的语言,主要用于数据库设计
。这类模型中最著名的是实体联系模型,简称E-R模型
。基本数据模型
目前常用的有:层次模型,网状模型、关系模型和面向对象数据模型
。数据结构
数据操作
数据的约束条件
实体-联系(E-R)方法是概念模型中常用的方法,该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的E-R图来表示数据模型。
实体
联系
两个不同实体之间的联系
两个以上不同实体集之间的联系
1:1:1
1:1:*
1:*:*
*:*:*
同一实体集内的二元联系
属性
简单属性
是原子的、不可再分
的复合属性
可以细分为更小的部分。如通信地址可以进一步细分为省、市、街道、邮编
等。一个属性有单个值或多个值
。如职工的亲属姓名
。无意义或不知道
。可以从其他属性得来
如参加工作时间和工作年限,身份证号和年龄等
。扩充的E-R模型
弱实体
特殊化
类似
于程序设计语言中变量
的概念。候选码
主码
主属性
元组/记录
元数
基数
R(U,D,dom,F)
R(U)
或 R(A1,A2,A3,…,An)
视图表
虚拟表
,是由基本表或其他视图表导出的表。不独立存储在数据库
的,数据库只存放它的定义
。实体
完整性
主属性不能取空值
。参照
完整性
当然可能为空值
(如新员工刚入职,还未分配具体部门的时候部门编号应取空值)用户定义
完整性
笛卡儿积
、连接运算
是最耗费时间和空间
的。合并乘积与其后的选择运算为连接运算
。预处理
,就能快速地找到要连接的元组。
存储公共子表达式
。
函数依赖
X→Y
,但Y⊈X
,则称X→Y是非平凡的函数依赖
。一般情况下总是讨论非平凡的函数依赖。X→Y
,但Y⊆X
,则称X→Y是平凡的函数依赖
。完全函数依赖与部分函数依赖
如果X→Y,并且对于X的任何一个真子集X',都有X'不能决定Y,则称Y对X完全函数依赖
,记作:X→Y。传递函数依赖
在R(U,F)中,如果X→Y,Y→Z,Y⊈X,Y⇸X,则称Z对X传递依赖
。候选码和主码
主码
通常也可以称为主关键字或主键
。包含在任何一个候选码中的属性
叫做主属性
,否则叫做非主属性。
外码
对称性
。即若X→→Y,则X→→Z,其中Z=U-X-Y。传递性
。即若X→→Y,Y→→Z,则X→→Z-Y。1NF(第一范式)
不可再分
的数据项,则关系模式R属于第一范式。记为R∈1NF。简单理解列中不可再分。例如,一个地址字段不应该被分解为省份、城市等子字段。
2NF(第二范式)
每一个非主属性完全依赖于码
,则关系模式R∈2NF。消除
了非主属性对码的部分函数依赖
,则称为2NF。简单理解一个表如果包含学号和课程编号作为联合主键,而姓名和课程名称分别只与学号和课程编号有关,那么这个表就不满足2NF。
3NF(第三范式)
消除
了非主属性对码的传递函数依赖
,则称为3NF。学生1(学号,姓名,学院编号,学院名称)∈2NF,但∉3NF。
BCNF(巴克斯范式)
消除
了主属性对码
的部分函数依赖和传递函数依赖
,则称为BCNF。4NF(第四范式)
如果只考虑函数依赖,关系模式最高的规范化程度是BCNF
,如果考虑多值依赖,关系模式最高的规范化程度是4NF
。L
:仅出现在函数依赖集F左部的属性R
:仅出现在函数依赖集F右部的属性LR
:在函数依赖集F左右部都出现的属性NLR
:在函数依赖集F左右部都未出现的属性L
类属性,则X必为
R的任一候选码的成员。若XF+=U,则X必为R的唯一候选码。R
类属性,则X不是
R的任一候选码的成员。NLR
类属性,则X必为
R的任一候选码的成员。分类
:
L
:只在左边出现,一定是
R
:只在右边出现,一定不是
NLR
:左右都没出现,一定是
L
类和NLR
类属性组合
起来,设为P,求其闭包PF+,如果是全集U,那么它就是候选码
。依次
将LR
类属性跟P组合
起来求闭包,只要其闭包是全集U,就是候选码
。极小函数依赖集
或最小覆盖
。
右侧
只有一个属性
。没有冗余的函数依赖
。左侧没有冗余的属性
。这个定理只适用于分解为两个子模式的情况,分解为多个子模式的时候不适用
。数据查询:Select
数据定义:Create、Drop、Alter
数据操纵:Insert、Update、Delete
数据控制:Grant、Revoke
1、创建表 CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]]… [,<表级完整性约束条件>]); 注:[ ]表示可选,< >表示必填。 2、修改表 语句格式:ALTER TABLE <表名> [ADD <新列名><数据类型>[列级完整性约束条件]] [DROP <完整性约束名>] [Modify <列名><数据类型>]); 如: ALTER TABLE S ADD Zap CHAR(6); //在表S中新增一列ZAP,该列的数据为空 ALTER TABLE S MODIFY Status INT; //将表S的Status属性的数据类型更改为INT ALTER TABLE S ADD Constraint C_cno CHECK(......) //在表S中新增CHECK约束,取名为C_cno 3、删除表 语句格式:DROP TABLE <表名> 如: DROP TABLE S; //表删除后,不再是数据库模式的一部分 例: 建立一个供应商、 零件数据库。 其中关系供应商S(Sno,Sname,Status,City),关系零件P( Pno,Pname,Color,Weight,City) 。 该数据库要满足如下要求: ( 1) 供应商代码不能为空,且值是唯一的,供应商的名称也是唯一的。 ( 2) 零件号不能为空,且值是唯一的; 零件名不能为空。 ( 3) 一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。 Create Table S ( Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(30) UNIQUE, Status CHAR(8), City CHAR(20), PRIMARY KEY(Sno)); // 此处隐含Sno唯一且不为空,列级完整性约束可不写 Create Table P (Pno CHAR(6), Pname CHAR(30) NOT NULL, Color CHAR(8), Weight NUMERIC(6,2), City CHAR(20), PRIMARY KEY(Pno)); Create Table SP (Sno CHAR(5), Pno CHAR(6), Status CHAR(8), Qty NUMERIC(9), PRIMARY KEY(Sno,Pno), FOREIGN KEY (Sno) REFERENCES S(Sno), FOREIGN KEY (Pno) REFERENCES P(Pno)) ;
实体完整性约束
在列后面加 PRIMARY KEY
在最后加PRIMARY KEY(属性名1,属性名2)
主码为属性组(两个或以上属性的组合)只能用这种方法
参照完整性约束
在列后面加 References 表名(属性名)
在最后面加,有几个外码,就写几行。
CASCADE
表示删除被参照关系的元组时,同时删除参照关系中的元组
; SET NULL
表示删除被参照关系的元组时,将参照关系的相应属性值置为空值
。属性值上的约束
NOT NULL
:表示不允许取空值
;UNIQUE
:表示取值唯一
;NOT NULL UNIQUE
:表示取值唯一且不为空
;CHECK
:限制
列中值的取值范围
。
1) 基于元组的检查子句:这种约束是对单个关系的元组值加以约束。
2) 基于断言的语法格式:
1、建立索引: 语句格式:CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…); • 次序:ASC(升序)或DESC(降序),默认为升序。 • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。 • CLUSTER:表明要建立的索引是聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织 如: CREATE UNIQUE INDEX S_Sno on S(Sno); //在表S的Sno列上建立索引S_Sno,默认为升序 CREATE UNIQUE INDEX P_Pno on P(Pno); //在表P的Pno列上建立索引P_Pno,默认为升序 CREATE UNIQUE INDEX J_Jno on J(Jno); //在表J的Jno列上建立索引J_Jno,默认为升序 CREATE UNIQUE INDEX SPJ_NO on SPJ(Sno ASC,Pno DESC,Jno ASC); //在表SPJ上建立索引SPJ_NO,属性Sno按升序,Pno按降序,Jno按升序 2、删除索引 语句格式:DROP INDEX <索引名> 例:DROP INDEX StudentIndex; //删除索引StudentIndex
字典
中,我们按字母建立索引
。在数据库中,索引是某个表中的一列或者若干列的值的集合,和相应的指向表中物理标识这些值的数据页的逻辑指针清单。可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义
。1、创建视图 CREATE VIEW 视图名(列表名) AS SELECT 查询子句 [WITH CHECK OPTION]; • 视图的创建中,必须遵循如下规定: (1) 子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。 (2) WITH CHECK OPTION表示对UPDATE,INSERT,DELETE操作时保证更新、插入或删除的行满足视图 定义中的谓词条件(即子查询中的条件表达式) (3) 组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT 子查询目标列的主属性组成 2、删除视图 语句格式:DROP VIEW 视图名 如:DROP VIEW CS_STUDENT //删除视图CS_STUDENT 例:学生关系模式S(Sno,Sname,Sage,Sex,SD,Email,Tel) ,建立计算机系(CS表示计算机系)学生的视图 ,并要求进行修改、插入操作时保证该视图只有计算机系的学生。 CREATE VIEW CS_STUDENT //创建视图CS_STUDENT AS SELECT Sno,Sname,Sage,Sex //选择学号、姓名、年龄、性别列 FROM Student //从学生表中查询 Where SD='CS' //选择系名等于“CS” 的行 WITH CHECK OPTION; //以后对该视图进行修改、插入操作时DBMS会自动加上SD='CS'的条件,保证视图中只有计算机系的学生
语句格式:SELECT [ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC | DESC]…]
最基本的查询语句:
Select Sno,Sname
from S
where sex='男'
;
更名操作:使用AS可以给列和表重命名。
Select 学生表.sno as 学号,Sname as 姓名,Grade 成绩 //AS是可以省略的
from S 学生表,SC 课程表 //表也可以重命名
where 学生表.Sno=课程表.Sno and 学生表.SD='计算机'; //表重命名后,引用时一定要用新名称,这里不能再用S和SC
(1) 检索选修了课程号为'C1'的学生号和学生姓名: Select S.Sno,Sname from S,SC where S.Sno=SC.Sno and SC.Cno='C1' ; (2) 检索选修课程名为“操作系统” 的学生号和学生姓名: Select S.Sno,Sname from S,SC,C where S.Sno=SC.Sno and SC.Cno=C.Cno and C.Cname='操作系统' ; (3) 检索至少选修了课程号为“C1” 和“C3” 的学生号: Select Sno from SC SC_X,SC SC_Y where SC_X.Sno=SC_Y.Sno and SC_X.Cno='C1' and SC_Y.Cno='C3' ;
(1) 检索选修了课程号为'C1'的学生号和学生姓名: Select Sno,Sname from S where Sno IN(Select Sno from SC Where Cno='C1') ; (2) 检索选修课程名为“操作系统” 的学生号和学生姓名: Select Sno,Sname from S where Sno IN (Select Sno from SC Where Cno IN (Select Cno From C Where Cname='操作系统' ) ) ; (3) 查询没有被任何同学选修的课程号和课程名 Select Cno,Cname from C where NOT EXISTS (select * from SC where SC.Cno=C.Cno ) ;
(1) 查询课程C1的最高分和最低分以及高低分之间的差距 Select MAX(Grade) ,MIN(Grade) ,MAX(Grade)-MIN(Grade) From SC Where Cno='C1' ; (2) 查询其他系比计算机系所有学生年龄都要小的学生姓名和年龄。 Select Sname ,Age From S Where Age<ALL(Select Age From S Where SD='计算机' ) AND SD<>'计算机' ; Select Sname ,Age From S Where Age<(SELECT MIN(Age) From S Where SD='计算机' ) AND SD<>'计算机' ;
1、 GROUP BY子句 对元组进行分组,此时聚集函数只用于每个分组。 (1) Select AVG(Grade) from SC ; (2) Select Sno ,AVG(Grade) from SC GROUP BY Sno ; 2、 HAVING子句: 假如元组在分组前按照某种方式加上限制,使得不需要的分组为空。可以在GROUP BY子句后面加上HAVING子句。其实就是分组后做一个选择,去掉不满足HAVING后面的那个条件的分组。 (3) Select Sno ,AVG(Grade) from SC GROUP BY Sno HAVING AVG(Grade)>85 ;
LIKE
来进行匹配操作,“%
” 匹配任意长度
字符串; “_
” 匹配任意一个
字符。模式是区分大小写的。(1) 查询住址包含“科技路” 的学生姓名: Select Sname from S Where Addr LIKE '%科技路%' ; (2)查询名字为‘国庆’ 的学生姓名、 年龄和所在系: Select Sname ,Sage ,SD from S Where Sname LIKE '__国庆' ; 为了使模式中包含特殊字符,即%和_,允许使用ESCAPE关键词来定义转义符,LIKE语句后面紧跟“ESCAPE'\'” 表明转义符'\' 后面的特殊字符为普通字符。 LIKE 'ab\%cd%'escape'\' //匹配所有以ab%cd开头的字符串 LIKE 'ab\\cd%'escape'\' //匹配所有以ab\cd开头的字符串
1、 UNION(并) 、 UNION ALL(不去掉重复行) 查询在银行有贷款或者有存款的所有客户身份证号: select customer_no from 贷款 union select customer_no from 存款 ; 2、 INTERSECT(交) 查询在银行既有贷款又有存款的客户身份证号: select customer_no from 贷款 intersect select customer_no from 存款 ; 3、 EXCEPT(差) 查询只在银行有贷款而没有存款的客户身份证号: select customer_no from 贷款 except select customer_no from 存款 ;
1、 LEFT JOIN(左外连接) SELECT S.Sno ,Sname ,SC.Cno ,Grade FROM S LEFT JOIN SC ON S.Sno=SC.Sno ; 2、 RIGHT JOIN(右外连接) SELECT S.Sno ,Sname ,SC.Cno ,Grade FROM S RIGHT JOIN SC ON S.Sno=SC.Sno ; 3、 FULL JOIN(全外连接) SELECT S.Sno ,Sname ,SC.Cno ,Grade FROM S FULL JOIN SC ON S.Sno=SC.Sno ;
语句格式:
INSERT INTO 表名 VALUES (值1,值2…)
INSERT INTO 表名(列名1,列名2…) VALUES (值1,值2…)
例:
INSERT INTO SC VALUES ('3001', 'C1', '84');
INSERT INTO SC(SNO,CNO) VALUES ('3001', 'C2');
语句格式:DELETE FROM 表名 WHERE 条件表达式
例:
DELETE FROM SC WHERE Cno='C1';
也可以删除表中的所有数据:
DELETE FROM 表名
例:
DELETE FROM SC;
语句格式:
UPDATE 表名 SET 列名=新值 WHERE 条件表达式
例:
UPDATE SC
SET Grade = 90
WHERE Sno='3001'
AND Cno='C2'
;
1、 视图的查询 例:建立计算机系(CS表示计算机系) 学生的视图,并要求进行修改、 插入操作时保证该视图只有计算机系的学生。 CREATE VIEW CS_STUDENT AS SELECT Sno ,Sname ,Sage ,Sex FROM Student Where SD='CS' WITH CHECK OPTION ; 此时要查询计算机系年龄小于20岁的学生的学号及年龄的SQL语句如下: SELECT Sno,Sage FROM CS_Student WHERE Sage<20 系统执行该语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。 也就是查询视图时,系统先从数据字典中取出视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。对上例修正之后的查询语句为: SELECT Sno,Sage FROM Student WHERE SD='CS' AND Sage<20; 2、 视图的更新 SQL对视图的更新必须遵循以下规则: (1) 从多个基本表通过连接操作导出的视图不允许更新。 (2) 对使用了分组、 聚集函数操作的视图不允许进行更新操作。 (3) 如果视图是从单个基本表通过投影、 选取操作导出的则允许进行更新操作,且语法同基本表。
语句格式: GRANT 权限 ON TABLE/DATABASE 表名/数据库名 TO 用户1,用户2… /PUBLIC [WITH GRANT OPTION] ; PUBLIC:表示将权限授予所有人 WITH GRANT OPTION:表示获得了这个权限的用户还可以将权限赋给其他用户。 例:用户要求把数据库SPJ中供应商S、 零件P、 项目J表赋予各种权限。各种授权要求如下: (1) 将对供应商S、 零件P、 项目J的所有操作权限赋给用户User1及User2。 GRANT ALL PRIVILEGES ON TABLE S,P,J TO USER1,USER2 ; (2) 将对供应商S的插入权限赋给用户User1,并允许将此权限赋给其他用户。 GRANT INSERT ON TABLE S TO USER1 WITH GRANT OPTION ; (3) DBA把数据库SPJ中建立表的权限赋给用户User1。 GRANT CREATETAB ON DATABASE SPJ TO User1 ;
语句格式: REVOKE 权限 ON TABLE/DATABASE 表名/数据库名 FROM 用户1,用户2… /PUBLIC [RESTRICT | CASCADE] ; RESTRICT:表示只收回语句中指定的用户的权限 CASCADE:表示除了收回指定用户的权限外,还收回该用户赋予的其他用户的权限。 例: -- 将用户User1及User2对供应商S、 零件P、 项目J的所有操作权限收回: REVOKE ALL PRIVILEGES ON TABLE S,P,J FROM User1,User2; -- 将所有用户对供应商S的所有查询权限收回: REVOKE SELECT ON TABLE S FROM PUBLIC; -- 将User1用户对供应商S的供应商编号Sno的修改权限收回。 REVOKE UPDATE(Sno) ON TABLE S FROM User1;
可以引用当前数据库以外的对象
,但只能在当前数据库中创建触发器。不能在临时表或系统表上创建触发器,但触发器可以引用临时表
。不能传递参数
,是sql语句的集合
,可以通过触发器来强制实现数据的完整性和一致性
不能包含事务控制语句
,内部可以使用DDL语句
。用户不能直接调用触发器
,由触发事件激活,并由数据库服务器自动执行。CREATE TRIGGER 触发器名称 [BEFORE | AFTER] [DELETE | INSERT | UPDATE OF 列名] //触发事件 ON 表名 [REFERENCING <临时视图名>] [FOR EACH ROW | FOR EACH STATEMENT] [WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作 BEGIN <触发动作> //BEGIN...END 中定义触发动作,即当触发条件满足时,需要数据库做什么 END [触发器名称] BEFORE/AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。 DELETE:当一个DELETE语句从表中删除行时激发触发器。 INSERT:当一个INSERT语句向表中插入行时激发触发器。 UPDATE/UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器。 REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW NEW ROW,对于语句级触发器,为OLD TABLE和NEW TABLE。 REFERENCING new row AS nrow / REFERENCING old row AS orow 。 FOR EACH ROW:表示为行级触发器,对每一个被影响的元组(即每一行)执行一次触发过程。 FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式 例:银行数据库关系模式如下: Account(Account-no, branch-name, balance) 账户(账号,支行名称,余额) Loan(Loan-no,branch-name,amount) 贷款(贷款号,支行名称,金额) Depositor(customer-name,Account-no) 存款(存款人姓名,账号) 假设银行处理透支时,不是将账户的余额设为负值,而是将账户余额设置为0,并且建立一笔贷款,其金额为透支金额。 这笔贷款的贷款号等于该透支账户的账号。 CREATE TRIGGER overdraft_trigger AFTER UPDATE ON Account //在Account表上建立触发器,触发事件是“修改后” Referencing new row as nrow //引用修改后的“行”为临时视图,命名为nrow For each row //表示其为行级触发器,即对每一行都执行一次触发 WHEN nrow.balance<0 //触发条件是修改后的行的balance属性值小于0,即账户余额为负。 BEGIN ATOMIC //ATOMIC关键字表示下面的语句为原子性的,即:要么都做,要么都不做。 INSERT INTO borrower ( Select customer-name, Account-no From depositor Where nrow.account-no = depositor.account-no ); //将透支客户的信息单独存储在borrower表中 INSERT INTO loan values ( nrow.account-no, nrow.branch-name, -nrow.balance ); //建立一笔贷款,将该笔记录插入到贷款表loan中 UPDATE account set balance=0 Where account.account-no = nrow.account-no; //将Account表中的余额设为0 END
1、 更改触发器
语句格式:
ALTER TRIGGER <触发器名> [BEFORE|AFTER]
DELETE|INSERT|UPDATE OF [列名]
ON 表名|视图名
AS
BEGIN
要执行的SQL语句
END
2、 删除触发器
语句格式:DROP TRIGGER <触发器名>
预编译
的方法。EXEC SQL <SQL语句>
SQLCA
,即SQL通信区
,是系统默认定义
的全局变量
。DECLARE
语句说明。 前面需要加“:”
例:EXEC SQL BEGIN DECLARE SECTION; char Msname[4], Msex[3], givensno[5]; int Mage; char SQLSTATE[6]; //特殊的共享变量,解释SQL语句的执行状况 EXEC SQL END DECLARE SECTION; (1) 根据共享变量givensno值查询学生关系students中学生的姓名、 年龄和性别。 EXEC SQL SELECT sname,age,sex INTO :Msname, :Mage, :Msex FROM students WHERE sno = :givensno ; (2) 某学生选修了一门课程,将其插入学生选课表SC中,假设学号、 课程号、 成绩已分别赋给主变量HSno、 Hcno 和 Hgrade。 EXEC SQL INSERT INTO SC(Sno,Cno,Grade) Values (:HSno, :HCno, :Hgrade) ;
游标
,通过移动游标指针来决定获取哪一条记录
。同时引入指示变量
来解决主语言无空值
的问题。1、 定义游标:
语句格式:EXEC SQL DECLARE <游标名称> CURSOR FOR <SELECT语句>
• 它只是一条说明性语句,定义游标后,其中的SELECT语句并不执行。
2、 打开游标:
语句格式:EXEC SQL OPEN <游标名称>
• 该语句执行游标定义中的SELECT语句,同时游标处于活动状态。游标是一个指针,此时指向查询结果的第一行之前。
3、 推进游标:
语句格式:EXEC SQL FETCH 游标名 INTO 变量表
• 该语句执行时,游标推进一行,并把游标指向的行(称为当前行) 中的值取出,送到共享变量中。
4、 关闭游标:EXEC SQL CLOSE 游标名
• 该语句关闭游标,使它不再和查询结果相联系。游标关闭后,后面还可以再打开
存储过程运行要比单个的SQL语句块要快
。数据库对象
,可以定义变量
,可以嵌套使用
,可以一次编译,多次执行
,可以包含流程控制
,被编译后保存在数据库中
CREATE PROCEDURE 存储过程名(IN|OUT|IN OUT 参数1 数据类型,IN|OUT|IN OUT 参数2 数据类型…)
[AS] //参数的数据类型只需要指明类型名即可,不需要指定宽度。具体宽度由外部调用者决定
BEGIN
<SQL语句>
END
IN:为默认值,表示该参数为输入型参数,在过程体中值一般不变。
OUT:表示该参数为输出参数,可以作为存储过程的输出结果,供外部调用者使用。
IN OUT:既可作为输入参数,也可作为输出参数。
只能三选二
。
一致性(C
onsistency)
可用性(A
vailablity)
分区容忍性(P
artition tolerance)
原子性(A
tomicity)
要么都做要么都不做
。一致性(C
onsistency)
隔离性(I
solation)
一个事务的执行不能被其他事务干扰
。相互隔离
的。持久性(D
urability)
一旦提交
,它对数据库的改变
必须是永久
的,即使系统出现故障也是如此。ACID的一种变种BASE
,它是一个弱一致性
的理论,只要求最终一致性
。
BA(
Basically Available)
S(S
oft state)
软状态,可以理解为“无连接的” 的
,而与之相对应的是“面向连接” 的。E(E
ventual consistency)
可行性分析与项目开发计划
可行性分析
和项目开发计划。需求分析
逻辑模型
。概要设计
设计应用系统的总体数据结构和数据库结构
。详细设计
不是编写程序,而是设计出程序的详细规格说明
,使程序员可以根据它们写出实际的程序代码。编码和单元测试
程序代码
,即写成某种特定程序设计语言表示的源程序清单,并仔细测试编写出每一个模块。综合测试
集成测试
和验收测试。维护
维护
阶段。该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。瀑布模型
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它规定了由前至后、 相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模型假设,一个待开发的系统需求是完整的、 简明的、 一致的,而且可以先于设计和实现完成之前产生。
优点
容易理解,管理成本低
;不足
客户必须能够完整、 正确和清晰地表达他们的需要
;在开始的两个或三个阶段中,很难评估真正的进度状态
;增量模型
增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别地开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量” 。增量模型强调每一个增量均发布一个可操作的产品。
优点
不足
将瀑布模型和演化模型结合起来
,加入了两种模型均忽略的风险分析,弥补了两种模型的不足。适用于庞大、 复杂并且具有高风险
的系统。自顶向下、 逐层分解和模块化设计
,它的基本原则是功能的分解与抽象
。优点
清晰
地描述每个任务从何时开始
,到何时结束
进展情况
并行性
。缺点
不能清晰
地反映出各任务之间的依赖关系
难以确定
整个项目的关键
所在不能反映
计划中有潜力
的部分。优点
开始时间
、 结束时间
和完成该任务所需的时间
任务之间的关系
,即哪些任务完成后才能开始另外一些任务关键路径
。松弛时间
则反映了完成某些任务时可以推迟其开始时间或延长其完成所需的时间。
关键路径
,1 → 2 → 3 → 4 → 6 → 8 → 10 → 11缺点
不能反映
任务之间的并行关系
自顶向下、 逐层分解
。对象是类的具体化,是类的实例
。继承
父类和子类之间共享数据和方法的机制
。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。多态
不同的对象收到同一消息可以产生完全不同的结果
,这一现象叫作多态。类图
一组类、 接口、 协作和它们之间的关系
。对象图
描述一组对象及它们之间的关系
。对象图描述了在类图中所建立的事物的实例的静态快照
。序列图
交互图
,交互图展现了一种交互,它由一组对象或参与者以及它们之间可能发送的消息构成
。交互图专注于系统的动态视图
。序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动,是强调消息的时间次序的交互图。• 数据流图(DFD) 是结构化分析方法中用来描述系统的逻辑模型的。它是面向数据流来建模的。
耦合性
数据耦合
相当于高级语言中的值传递
。两个模块之间传递的是数据结构
,如高级语言中的数据组名、 记录名、 文件名等这些名字即为标记。控制耦合
控制变量
,被调模块通过该控制变量的值有选择地执行块内的某一功能。公共耦合
公共数据环境相互作用
的那些模块之间的耦合。内聚
回归测试
变更部分的正确性
和对变更需求的符合性
,以及软件原有的、 正确的功能、 性能和其他规定的要求的不损害性
。黑盒测试法
功能测试
,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性
。主要用于集成测试、 确认测试和系统测试中。等价类划分、 边界值分析、 错误推测和因果图
等。白盒测试法
结构测试
,主要用于软件单元测试中。它的主要思想是将程序看作是一个透明的白盒,测试人员完全清楚程序的结构和处理算法,按照程序内部逻辑结构设计测试用例
。逻辑覆盖,循环覆盖和基本路径测试
。抽象 → 设计局部视图 → 合并取消冲突 → 修改重构消除冗余
1、 实体向关系模式的转换
对于多值属性采用的方法是将实体的码和每个多值属性独立构成一个关系模式,得到的关系模式属于4NF
2、 一对一联系的转换(1:1
):
3、 一对多联系的转换(1:*
):
4、 多对多联系的转换(*:*
):
5、 多对多对多联系的转换(*:*:*
):
*:*:*
) 也是一样,只能转换成一个独立的关系模式,关系模式的属性取三方实体的码及联系的属性,关系模式的码为三方实体的码组成的属性组。 如:一个供应商可以给多个项目供应多种零件,一个项目可以使用多个供应商供应的多种零件。6、 一些特殊情况:
索引字段
和索引类型
。数据库重组
数据库重构
审计是被动的,它只能跟踪对数据库的修改而不能防止
,但作为一个安全性手段,起到对非法入侵的威慑作用,可以据此追究非法入侵者的法律责任。尽可能地减少多表查询或建立物化视图
。以不相关子查询替代相关子查询
。用带IN的条件子句等价替换OR子句
。经常提交COMMIT,以尽早释放锁
。如果是经常使用范围查询,则B树索引比散列索引更高效
。是恢复和并发控制的基本单位
。要么都做,要么都不做
” 。具有ACID
特性。例:从账户A转入账户B金额x元。
BEGIN TRANSACTION // 事务开始
read(A); // 读账户A的余额
A=A-x; // A账户金额减去x元
IF(A<0) THEN
print (“金额不足,不能转账”) ;
ROLLBACK; // 撤销该事务,回到事务执行前的状态
ELSE
write(A); // 写入账户A的余额
read(B); // 读账户B的余额
B=B+x;
write(B);
COMMIT; // 提交事务
ENDIF;
END TRANSACTION // 事务结束
原子性
要么都做要么都不做
。一致性
数据不会因为事务的执行而遭受破坏
。隔离性
一个事务的执行不能被其他事务干扰
。持久性
一个事务一旦提交
,它对数据库的改变必须是永久的
,即使系统出现故障也是如此。串行调度
并发调度
可恢复调度
丢失修改
两个事务对同一个数据进行修改
,导致事务A对数据库的修改被事务B的修改所覆盖
。不可重复读
两次读取的间隙数据被另一事务修改了
。读脏数据
撤销
了。多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们的结果相同,称这种调度策略是可串行化的调度。
可串行性是并发事务正确性的准则。 即:一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
排它锁
(Exclusive Locks, 简称X锁
)
写锁
写操作
时进行锁定。加上X锁
后,就只允许事务T对数据A进行读取和修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A
,直到事务T释放A上的锁。共享锁
(Share Locks, 简称S锁
)
读锁
读操作
时进行锁定。加上S锁
后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有了S锁,任何事务都只能再对其加S锁读取而不能加X锁修改
。一级封锁协议
X
锁,直到事务结束才释放X锁。 解决了丢失修改的问题。二级封锁协议
一级封锁协议加上
事务T在读取数据A之前必须对其加上S
锁,读完后即可释放S锁
。 解决了读脏数据的问题。三级封锁协议
一级封锁协议加上
事务T在读取数据A之前必须对其加上S
锁,直到事务结束才释放S锁
。 解决了不可重复读的问题。第一阶段是获得封锁,也称为扩展阶段。 第二阶段是释放封锁,也称为收缩阶段。
遵循两段锁协议,一定是可串行化的; 不遵循两段锁协议,可能是可串行化的,也可能不是
。采用两段锁协议也有可能产生死锁
,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。N
条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条
数据了,就产生了幻读。脏读是读错值,幻读是行数变更
事务故障
系统故障
恢复仅需要使用日志
,不需要使用备份
。介质故障
静态转储
是指在转储期间不允许对数据库进行任何存取、 修改操作
;动态转储
是在转储期间允许
对数据库进行存取、 修改操作
转储和用户事务可并发执行
。
要使数据库在发生故障后能够恢复,必须建立冗余数据,在故障发生后利用这些冗余数据实施数据库恢笔,常用的是数据转储和日志文件。
数据库恢复基本原理是冗余
。
1、 故障恢复的两个操作:
撤销事务(UNDO)
将未完成的事务撤销
,使数据库恢复到事务执行前的正确状态。撤销事务的过程
:反向扫描日志文件(由后向前扫描) ,查找事务的更新操作; 对该事务的更新操作执行逆操作,用日志文件记录中更新前的值写入数据库,插入的记录从数据库中删除,删除的记录重新插入数据库中; 继续反向扫描日志文件,查找该事务的其它更新操作并执行逆操作直至事务开始标志。重做事务(REDO)
将已提交的事务重新执行
。重做事务的过程
:从事务的开始标志起,正向扫描日志文件,重新执行日志文件登记的该事务对数据库的所有操作,直至事务结束标识。2、 故障恢复策略:
事务故障的恢复
UNDO
) 产生故障的事务,使数据库恢复到该事务执行前的正确状态来完成的。事务故障的恢复是由系统自动完成的,对用户是透明的
。系统故障的恢复
UNDO+REDO
:
撤销
故障发生时未完成的事务(UNDO) 。重做
已经提交的事务(REDO) 。检查点机制(CHECKPOINT)
IaaS
)
提供虚拟化的计算资源
,如虚拟机、 存储、 网络和操作系统。 其核心技术是虚拟化。PaaS
)
开发的环境
。 其核心技术是分布式并行计算。 PaaS实际上是指将软件研发的平台作为一种服务。SaaS
)
按需软件付费
应用程序,云计算提供商托管和管理软件应用程序,并允许用户连接到应用程序并通过互联网访问应用程序。 客户可以自己定制、 配置、 组装来得到满足自身需求的软件系统。价值密度低
。 大数据的本质是需要从海量数据中获取具有高价值的数据。全部认真看一遍
商标注册看谁先使用
选择C
)
申请专利看谁先申请
,若同一天协商确定
选择D
)
软件著作权
属于软件开发者
,自软件开发完成之日起
产生
构成我国保护计算机软件著作权
的两个基础法律文件
著作权法
》条例
》单个自然人的软件著作权保护期
为 自然人终生及其死亡后50年
补充E-R图
: 将题目中的说明多读几遍来确认参与联系的实体以及联系的类型。 确认联系类型的时候一定要优先根据题干的说明来判断,如果题干可以得到的信息较少,或不足以判断,再根据题目中给出的关系模式来。补充
关系模式中的属性
: 一般都可以从题目的说明中找到答
案,带着问题再去读说明。 如果一下子没有找到,再通读说明,根据具体语义以及E-R图去判断。依据需求分析中的文字说明来判断
。依据逻辑结构设计(关系模式) 来判断
。依据现实中的生活经验来判断
【说明】
【需求描述】
【问题1】(6分)
【问题2】(4分)补充下列逻辑结构设计中的(a)、(b)两处空缺,并描述完整性约束关系。
【问题3】(5分)
若快递驿站还兼有缴水电费业务,请增加新的“水电费缴费记录”实体,并给出客户和水电费缴费记录之间的“缴纳”联系,对图1-1进行补充。“水电费缴费记录”实体包括编号、客户手机号码、缴费类型、金额和时间,请给出“水电费缴费记录”的关系模式,并说明其完整性约束。
答
水电费缴费记录(编号,客户手机号码,缴费类型,金额,时间)
主码为编号,外码为客户手机号码。
【说明】某社区蔬菜团购网站,为规范商品收发流程,便于查询客户订单情况,需要开发一个信息系统。请根据下述需求描述完成该系统的数据库设计。
【需求描述】
【概念模型设计】
【逻辑结构设计】
【问题1】(6分)根据问题描述,补充图1-1的实体联系图。
【问题2】(4分)补充逻辑结构设计结果中的(a)、(b)两处空缺及完整性约束关系。
【问题3】(5分)若社区蔬菜团购网站还兼有代收快递的业务,请增加新的“快递”实体,并给出客户实体和快递实体之间的“收取”联系,对图1-1进行补充。“快递”关系模式包括快递编号、客户电话和日期。
【说明】
【需求描述】
【概念模型设计】
【逻辑结构设计】
【问题1】(4分)根据问题描述,补充图1-1的实体联系图(不增加新的实体)。
【问题2】(4分)补充逻辑结构设计结果中的(a)、(b)两处空缺,并标主键和外键完整性约束。
【问题3】(7分)若医院还兼有核酸检测的业务,检测者可能需要进行多次核酸检测(每天最多检测一次),但每次都可以在全市任意一家医院进行检测。请在图1-1中增加“被检测者”实体和相应的属性、医院和被检测者之间的“检测”联系和必要的属性,并给出新增加的关系模式。“被检测者”实体包括姓名、身份证号、住址和一个电话。“检测”联系需要包括检测日期和检测结果等。
【说明】
【需求描述】
【概念模型设计】
【逻辑结构设计】
【问题1】(5分)根据问题描述,补充图1-1的实体联系图(不增加新的实体)。
【问题2】(3分)补充逻辑结构设计结果中的(a)、(b)两处空缺,并标主键和外键完整性约束。
【问题3】(7分)该汽车公司现新增如下需求:记录车型在全国门店的销售情况。门店信息包括门店的编号、地址和电话;售包括销售数量和销售日期等。对原有设计进行以下修改以实现该需求:
(1)在图1-1中体现门店信息及其车型销售情况,并标明新增的实体和联系,及其必要属性。
(2)给出新增加的关系模式,并标注主键和外键完整性约束。
常考的几个问题
1、 找候选码:
候选码可以决定关系模式中的所有属性,且候选码的任何一个真子集都不能单独决定全属性
。2、 是否满足某一范式,或最高可达到第几范式:将每一个范式的定义记牢,背熟:
非主属性
对码
的部分函数
依赖的,不满足2NF
非主属性
对码
的传递函数
依赖的,不满足3NF
主属性
对码
的部分和函数依赖的,不满足BCNF
多值依赖
的,形如X→→Y,X和Y必在一个关系模式,且只有X和Y,不能有其它多余属性。 如果有,不满足4NF
。3、 分解关系模式:
总结
候选码
的含义,看哪些属性或属性组合可以决定所有的属性
。有编号(ID) 的,首要考虑。 一般不把姓名,名称等作为候选码
,但题目中没有其它更好选择的除外。确定范式: 根据找出的函数依赖集,确实是否有部分、 传递函数依赖,再来判断属于第几范式
。分解要保持函数依赖
【说明】
【问题1】(6分)给出人员分配表中成立且左侧只有一个属性的所有函数依赖关系。题中设计的人员分配表是否满足2NF,请说明原因。
【问题2】(3分)如果要将人员分配表规范化为满足3NF,请简要说明解决方案。
【问题3】(6分)请给出问题2设计结果中各个表的主键和外键。
【说明】
【问题1】(6分)给出消毒记录表中成立且左侧只有一个属性的所有函数依赖关系。题中设计的消毒记录表是否满足2NF?请用100字以内的文字说明原因。
【问题2】(6分)如果要将消毒记录表规范化为满足3NF,请用100字以内的文字简要说明解决方案,并给出各个新表的主码和外码。
【问题3】(3分)如果每辆车每日有多次消毒,需要记录每次消毒的消毒时间,在问题2设计结果的基础上,如何在不破坏3NF且不增加冗余的前提下做到?请简单说明方案。
【说明】
【问题1】(3分)冲线记录表中是否含有数据冗余?如果存在冗余,请列同冗余属性。
【问题2】(6分)请分别给出冲线记录表、赛车表和车手表的主码和外码。
【问题3】(6分)题干描述的冲线记录表是否满足3NF?如果不满足,请给出导致不满足3NF的函数依赖关系,并用50字以内的文字简要说明解决方案。
【问题1】(3分) 请将下面创建订单表的SQL语句补充完整,要求定义实体完整性约束,参照完整性约束,以及其它完整性约束。 CREATE TABLE ORDERS ( Ono CHAR(20) PRIMARY KEY Cno CHAR(10)(a), Gno CHAR(15)(b), Oprice NUMERIC(7,2), Onumber SMALLINT(c) ) ; 【问题2】(5分) 查询所有订单的详细情况,要求输出订单号(Ono)、客户姓名(Cname)、商品名称(Gname)、单价(Oprice)、数量(Onumber)和金额(Oamount),查询结果按照金额从大到小排列。此功能由下面的SQL语句实现,请补全。 SELECT Ono, Cname, Gname, Oprice, Onumber ,(d)AS Oamount FROM CUSTOMERS, ORDERS, GOODS WHERE (e) AND (f) (g) BY (h) ; 【问题3】(5分) 创建已售商品信息视图,给出已售商品的编号(Gno)、名称(Gname)、订单个数(Onum)及平均每单的商品数量(GAnum)。此视图的创建语句如下,请补全。 CREATE (i) GOODS_SOLD AS SELECT ORDERS.Gno AS Gno, MIN(GOODS.Gname ) AS Gname ,(j) AS Onum ,(k) AS GAnum FROM ORDERS,GOODS WHERE ORDERS.Gno = GOODS.Gno (l)BY(m) ; 【问题4】(2分) 查询未售出商品的编号和名称。此功能由下面的SQL语句实现,请补全。 SELECT Gno, Gname FROM(n) (o) SELECT Gno,Gname FROM GOODS_SOLD ;
(a)REFERENCES CUSTOMERS(Cno) (b)REFERENCES GOODS(Gno) (c)CHECK (Onumber BETWEEN 1 AND 99) 或 CHECK (Onumber>= 1 AND Onumber<=99) (d)ORDERS.Oprice * ORDERS.Onumber 或 Oprice * Onumber (e)ORDERS.Cno = CUSTOMERS.Cno (f)ORDERS.Gno=GOODS.Gno e和f可互换 (g)ORDER (h)Oamount DESC (i)VIEW (j)COUNT(*) (k)AVG(ORDERS.Onumber) (l)GROUP (m)ORDERS.Gno (n)GOODS (o)EXCEPT
【问题1】(5分) 请将下面创建选手参赛表PC的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。 CREATE TABLE PC( Pno CHAR(10) REFERENCES(a)(Pno), Cno CHAR(3) REFERENCES(b)(Cno), City CHAR(20)(c) Rank CHAR(2)(d) Point SMALLINT, (e) ) ; 【问题2】(6分) 查询所有未参加‘AI’类别竞赛的选手,要求输出选手的编号(Pno),查询结果按照选手编号的升序排列。此功能由下面的SQL语句实现,请补全。 SELECT Pno FROM(f) WHERE Pno(g)( SELECT(h)FROM PC, Contest WHERE(i) (j) Type ='AI') (k) Pno; 【问题3】(4分) 由于某种原因,编号为'E06'的竞赛项目在正式举办前被取消了。而此前系统中已经记录了一些选手的报名参赛情况,因此需要在系统中删除'E06'的竞赛项目记录,以及该竞赛的所有报名参赛纪录。根据问题1在选手参赛表PC上定义的参照完整性约束,此功能可以由下面的SQL语句实现,请补全。 (l)FROM(m)WHERE Cno='E06'; (n)FROM(o)WHERE Cno='E06';
(a)PLAYER (b)CONTEST (c)NOT NULL (d)CHECK (Rank=’一’ or Rank=’二’ or Rank=’三’ or Rank=’无’) 或 CHECK (Rank in (’一’ ,’二’ ,’三’ ,’无’ )) (e)PRIMARY KEY (Pno,Cno) (f)PLAYER (g)NOT IN (h)Pno (i)CONTEST.Cno=PC.Cno (j)AND (k)ORDER BY (l)DELETE (m)PC (n)DELETE (o)CONTEST
【问题1】(4分) 请将下面创建零件表PART的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。 CREATE (a) PART( Pno CHAR(10)(b) , Pname CHAR(20), Color CHAR(4), Sno CHAR(4)REFERENCES(c)(Sno), Stock INT(d) ) ; 【问题2】(3分) 创建视图PART_USED,给出在项目中已使用零件的代码和使用量。此视图的创建语句如下,请补全。 CREATE VIEW PART_USED AS SELECT Pno,(e)AS Usage FROM PJ (f)BY(g) ; 【问题3】(4分) 在视图PART_USED的基础上查询所有零件的信息,要求输出每种零件的零件代码、零件名、零件颜色和零件总量(使用量与库存量之和),查询结果按照零件总量降序排列。此功能由下面的SQL语句实现,请补全。 SELECT Pno, Pname, Color,(h)AS Total FROM PART, PART_USED WHERE PART.Pno = PART_USED.Pno (i) SELECT Pno, Pname, Color, Stock AS Total FROM PART WHERE Pno(j) ( SELECT DISTINCT Pno FROM PJ) ORDER BY Total(k) ; 【问题4】(4分) 由于某种原因,要拆除代码为‘A006’的仓库,该仓库中的零件转入‘A002’仓库存放。据此更新数据库的功能由下面的SQL语句实现,请补全。 UPDATE(l)SET(m)WHERE Sno=’A006’; (n)FROM(o)WHERE Sno=’A006’;
(a)TABLE
(b)PRIMARY KEY
(c)STORE
(d)CHECK (Stock>=0)
(e)SUM(Qty)
(f)GROUP
(g)Pno
(h)Stock+Usage
(i)Union 或 Union all
(j)NOT IN
(k)DESC
(l)PART
(m)Sno=’A002’
(n)DELETE
(o)STORE
【问题1】(3分) 请将下面创建课程表COURSE的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。 CREATE TABLE COURSE( Cno CHAR(4) PRIMARY KEY, Cname CHAR(30)(a), Cpno CHAR(4) REFERENCES(b),(c), Ccredit INT ); 【问题2】(4分) 有一门课程号为“C036”的新开课,要求所有学生选修。该课程的基本信息已经录入课程表COURSE中,现需在选课表SC中插入该课的选课记录。实现此功能的SQL语句如下,请补全。 (d)INTO SC(Sno,(e)) SELECT Sno,(f) FROM(g) ; 【问题3】(4分) 查询每一门课程的间接先修课(先修课的先修课),要求输出课程号和间接先修课的课程号。即使某门课程没有先修课,也需要输出,不过其间接先修课为空。此功能由下面的SQL语句实现,请补全。 SELECT K1.Cno,(h) FROM COURSE K1(i)OUTER JOIN COURSE K2 (j)((k)) ; 【问题4】(4分) 查询选修了课程表中已有全部课程的学生,要求输出学号和姓名。此功能由下面的SQL语句实现,请补全。 SELECT Sno,Sname FROM STUDENT WHERE NOT EXISTS (SELECT * FROM(l) WHERE(m) (SELECT * FROM(n) WHERE(o))) ;
(a)UNIQUE (b)COURSE (c)(Cno) (d)INSERT (e)Cno (f)‘C036’ (g)STUDENT (h)K2.Cpno (i)LEFT (j)ON (k)K1.Cpno=K2.Cno (l)COURSE (m)NOT EXISTS (n)SC (o)Sno=STUDENT.Sno AND Cno=COURSE.Cno
第十二章需要多看,特别是标黄部分
什么是两段锁协议
同一事务
对任何数据进行读写之前
必须对该数据加锁
;在释放
一个封锁之后
,该事务不再申请和获得任何其他封锁
。第一阶段是获得封锁,也称为扩展阶段。 第二阶段是释放封锁,也称为收缩阶段。
遵循两段锁协议,一定是可串行化的; 不遵循两段锁协议,可能是可串行化的,也可能不是
。采用两段锁协议也有可能产生死锁
,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。什么是死锁
两个以上
的进程互相都要求对方已经占有的资源导致无法继续运行下去
的现象。M =(k-1)×n+1
互斥条件. 请求保持条件. 不可剥夺条件、环路条件
。鸵鸟策略. 预防策略. 避免策略和检测与解除死锁
。
预防
:采用某种策略限制并发进程对资源的请求。避免
:如银行家算法。检测
:系统定时地运行一个程序来检测是否发生死锁,若有,则设法加以解除。解除
:有资源剥夺法和撤销进程法。触发器、存储过程、游标等关键字需要注意,详见第八章
【说明】
【问题1】(5分)
【问题2】(6分)
时间 | 用户1事务 | 用户2事务 | 用户3事务 |
---|---|---|---|
T0 | …… | …… | …… |
T1 | Read(p_nums) | ||
T2 | Read(p_nums) | ||
T3 | P_nums=p_nums-1 | ||
T4 | P_nums=p_nums-1 | Read(p_nums) | |
T5 | Write(p_nums) | ||
T6 | Write(p_nums) | ||
T7 | Read(p_nums) | ||
T8 | …… | …… | …… |
【问题1】(5分) 系统定期扫描书籍销售订单表,根据书籍总的销售情况来确定书籍的销售类别。下面是系统中设置某书籍销售类别的存储过程,结束时需显式提交返回。请补全空缺处的代码。 CREATE PROCEDURE UpdateBookSaleType(IN bno varchar(20)) DECLARE all_nums number(6); BEGIN SELECT (a) (book nums) INTO all nums FROM orders WHERE book_no = (b) ; IF all nums < (c) THEN UPDATE books SET sale_type = 0 WHERE book_no = bno; ELSE UPDATE books SET sale_type = (d) WHERE book_no = bno; END IF (e) ; END 【问题2】(6分) 下面是系统中自动补货功能对应的触发器,请补全空缺处的代码。 CREATE TRIGGER BookOrdersTrigger (f) update of (g) on books (h) WHEN (i) <(SELECT level FROM bookminlevel WHERE bookminlevel.book_no=OLD.book_no) AND (j) >=( SELECT level FROM bookminlevel WHERE bookminlevel.book_no= OLD.book_no); BEGIN INSERT INTO (k) (SELECT book_no, limit_amount FROM booklimit as TMP WHERE TMP.book_no=OLD.book_no AND TMP.sale_type=OLD.sale_type); END
【问题1】 (a)SUM (b)Bno (c)10000 (d)1 (e)COMMIT 【问题2】 (f)AFTER (g)all_nums (h)REFERENCING old row as OLD,new row as NEW FOR each row (i)NEW.all_nums (j)OLD.all_nums (k)Bookorders
时间 | 用户1事务 | 用户2事务 |
---|---|---|
T0 | …… | …… |
T1 | read(all_nums) | |
T2 | all_nums=all_nums-2 | |
T3 | write(all_nums) | |
T4 | read(all_nums) | |
T5 | all_nums=all_nums-3 | |
T6 | write(all_nums) | |
T7 | ROLLBACK | |
T8 | …… | …… |
【问题1】(6分) 下面是系统日终时生成网点当日余额汇总数据的存储过程,请补全空缺处的代码。 CREATE PROCEDURE BranchBalanceSum(IN s_date CHAR(8)) DECLARE all_balance number(14,2); v_bran_no varchar(10); v_bran_name varchar(30); (a) c_sum_bal IS SELECT open_branch_no, open_branch_name, sum(a_bal) FROM accounts GROUP BY open_branch_no, open_branch_name; BEGIN OPEN c_sum_bal; LOOP (b) c_sum_bal INTO v_bran_no, (c) ; IF c_sum_bal NOTFOUND THEN //未找到记录 (d) END IF; INSERT INTO branch_sum VALUES (v_bran_no, s_date, v_bran_name,all_balance); END LOOP CLOSE (e) ; COMMIT; EXCEPTION 【问题2】(5分) 当执行存取款交易导致用户账户余额发生变更时,账务系统需要给用户发送余额变更短信通知。通知内容为“某时间您的账户执行了某交易,交易金额为××元,交易后账户余额为××元”。默认系统先更新账户表,后更新账户交易明细表。 下面是余额变更通知功能对应的程序,请补全空缺处的代码。 CREATE TRIGGER BalanceNotice (g) INSERT on (h) (i) WHEN (j) =1 DECLARE v_phonevarchar(30); v_type varchar(30); v_bal number(14,2); v_msg varchar(300); BEGIN SELECT phone_no, a_bal INTO v_phone, v_bal FROM accounts WHERE a_no = (k) IF NEW.t_type=1 THEN v_type: = ’存款’; END IF; IF NEW.t_type=2 THEN v_type: = ’取款’; END IF; v_msg: = NEW.t_date &&’,您的账户’ && NEW.a_no && ’上执行了’ && v_type && ‘交易,交易金额为’’ && to_string(NEW.t_amt) && ‘元,交易后账户余额为’ && to_string(v_bal) && ‘元’; SendMsg(v_phone,v_msg); //发送短信 END
【问题1】 (a)CURSOR (b)FETCH (c)v_bran_name, all_balance (d)DO BREAK 或 EXIT (此处为跳出LOOP循环,参考20年的题使用DO BREAK,有的机构给的是EXIT,EXIT为ORACLE中的用法,具体是什么看出题老师的意思了) (e)c_sum_bal (f)ROLLBACK 【问题2】 (g)AFTER (h)trade_details (i)REFERENCING new row as NEW FOR each row (j)t_result或NEW.t_result (k)NEW.a_no
时间 | 某网点账户余额汇总事务 | 账户取款事务 |
---|---|---|
T0 | …… | …… |
T1 | 读第1个账户,汇总 | |
T2 | 读第2个账户,汇总 | |
T3 | 第3个账户发生取款交易 | |
T4 | commit | |
T5 | 读第3个账户,汇总 | |
T6 | …… | |
T7 | 读最后账户,汇总 | |
T8 | …… | …… |
【问题1】(6分) 下面是月底25日计算某员工最终工资的存储过程程序,请补全空缺处的代码。 CREATE PROCEDURE SalaryCalculation ( (a) empId char (8), IN iYear number(4), IN iMonth number(2)) DECLARE attendance number(14,2); merit number(14,2); overtime number(14,2); base number(14,2); all_salary number(14,2); BEGIN SELECT attendance_wage,merit_pay, overtime_wage INTO (b) FROM SALARY WHERE Eid= empId FOR UPDATE; SELECT Jbase_salary INTO :base FROM EMPLOYEES T1, (c) WHERE T1.Jid = T2.Jid AND T1.Eid = empId; all_salary = attendance + merit + overtime + base; UPDATE SALARY SET salary = :all_salary WHERE (d) AND year = iYear AND month = iMonth; EXCEPTION WHEN OTHERS THEN (e) ; END 【问题2】(5分) 为了防止对员工工资表的非法修改(包括内部犯罪),系统特意规定了员工工资表的业务规则:对员工工资表的修改只能在每月25日的上班时间进行。 下面是员工工资表修改业务规则对应的程序,请补全空缺处的代码。 CREATE TRIGGER CheckBusinessRule (g) INSERT OR DELETE OR (h) on SALARY FOR EACH (i) BEGIN IF (TO_CHAR(sysdate,’DD’)<> (j) ) OR (TO_number(TO_CHAR(sysdate,’HH24’)) (k) BETWEEN 8 AND 18) THEN Raise_Error; //抛出异常 END IF; END;
【问题1】
(a)IN
(b):attendence, :merit, :overtime
(c)JOB_LEVELS T2
(d)Eid = empId
(e)这里应该有e和f两个空,题目只有e空,按题意可能是一个COMMIT一个ROLLBACK,发生错误回滚,否则提交 。
(f)ROLLBACK
【问题2】
(g)BEFORE
(h)UPDATE
(i)ROW
(j)‘25’
(k)NOT
时间 | 计算最终工资事务 | 人事部门奖罚事务 |
---|---|---|
T0 | …… | …… |
T1 | 读取考勤、绩效和加班工资 | |
T2 | 根据奖罚更新最终工资 | |
T3 | commit | |
T4 | 读取岗位工资 | |
T5 | 计算最终工资并写入 | |
T6 | commit | |
T7 | …… |
提交
的事务,执行REDO(重做)
未提交
的事务,执行UNDO(撤销)
CHECKPOINT
)之前有START标志
的事务。检查点之前提交
(COMMIT)的事务
在恢复时不用做任何操作
。检查点之后提交
的事务
REDO
(重做) 。没有提交
的事务
UNDO
(撤销) 。日志记录编号 | 日志记录内容 |
---|---|
LSN1 | <T1, START> |
LSN2 | <T1,X,100,1> |
LSN3 | <T2,START> |
LSN4 | <T2,X,1,3> |
LSN5 | <T3,START> |
LSN6 | <T2,Y,50,6> |
LSN7 | <T3,Y,6,8> |
LSN8 | <T3,Z,10,9> |
LSN9 | CHECKPOINT |
LSN10 | <T1,COMMIT> |
LSN11 | <T3,Z,9,10> |
LSN12 | CRASH |
检查点之后T1事务提交了
,因此要重做(REDO
),方法是从T1事务的开始标记起
,正向扫描日志文件
,重新执行T1对数据库的所有操作,直到事务结束标志。检查点后T2、T3未提交
,因此要撤销(UNDO
),方法是反向扫描日志文件
,将T2和T3对数据库的所有更新操作执行逆操作
,直到事务开始标志。日志记录编号 | 日志记录内容 |
---|---|
LSN1 | <T1, START> |
LSN2 | <T1,I,22,3> |
LSN3 | <T2,START> |
LSN4 | <T2,L,32,37> |
LSN5 | <T3,START> |
LSN6 | <T2,J,45,5> |
LSN7 | <T1,COMMIT> |
LSN8 | <T3,M,53,15> |
LSN9 | <T3,K,9,11> |
LSN10 | CHECKPOINT |
LSN11 | <T2,COMMIT> |
LSN12 | CRASH |
介质损坏
,数据库无法启动,请用100字以内的文字简要说明其恢复过程。
更换存储介质,重装数据库
装载故障前最近一次的数据库备份(数据库镜像)和日志文件副本
撤销(UNDO)故障发生时(检查点前)未完成的事务,重做(REDO)(检查点后)已提交的事务
日志记录编号 | 日志记录内容 |
---|---|
LSN1 | <T1, START> |
LSN2 | <T1,I,3,5> |
LSN3 | <T2,START> |
LSN4 | <T1,J,6,7> |
LSN5 | <T2,I,5,4> |
LSN6 | <T1,COMMIT> |
LSN7 | CHECKPOINT |
LSN8 | <T2,J,7,8> |
LSN9 | <T3, START> |
LSN10 | <T3,K,11,18> |
LSN11 | <T4, START> |
LSN12 | <T4,K,18,19> |
LSN13 | <T2,COMMIT> |
LSN14 | CRASH |
如果系统采用先写数据库再记日记的机制,故障发生前已经提交了事务T2,但没有记录到<T2,COMMIT>
。请给出系统恢复后I、J、K的值。
如果先写入数据文件,后写日志,可能导致数据被修改后,该条修改记录没有来得及写入日志,系统就发生了故障,在恢复时无法恢复该条记录
。而先写日志,后写数据文件,即使在写日志与写数据文件的间隙发生了故障,并不影响最终数据库恢复的正确执行
。日志记录编号 | 日志记录内容 |
---|---|
LSN1 | <T1, START> |
LSN2 | <T1,I,20,8> |
LSN3 | <T2,START> |
LSN4 | <T2,J,0,1> |
LSN5 | <T2,J,1,5> |
LSN6 | <T3,START> |
LSN7 | <T2,J,5,6> |
LSN8 | <T1,COMMIT> |
LSN9 | CHECKPOINT |
LSN10 | <T2,COMMIT> |
LSN11 | <T3,I,8, (a) > |
LSN12 | CRASH |
LSN13 | (b) |
LSN14 | (c ) |
【问题1】(5分)请用100字以内的文字简要说明数据库系统常见故障类型,并说明表5-1中的日志记录表明数据库出现哪种类型的故障。
事务故障
:是由于程序执行错误而引起事务非预期的、异常终止的故障。系统故障
:是指硬件故障、软件(DBMS、OS或应用程序)漏洞的影响,导致丢失了内存中的信息,影响正在执行的事务,但未破坏存储在外存上的信息。介质故障
:是指数据库的存储介质发生故障,如磁盘损坏,瞬间强磁场干扰等。【问题2】(4分)请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(Undo)的事务列表。
【问题3】(6分)根据题干中所描述的业务逻辑,请填写表5-1日志记录中的空白(a);请给出Undo恢复的补偿日志记录,填写空白(b)和(c
)。
c
)<T3,abort>Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。