数据库复习
还几天考数据库了,看了看往年试卷没找几道会的题.
翻了翻书复习,内容太多了
所以打算拿往年试卷复习.
INTERSECT ∩
UNION ∪
EXCEPT -
exists/in/all/any R
- DBMS 数据库管理系统
- DBA 数据库管理员
- DB 数据库
- 关系数据库(关系模型)提出者(E.F.code)
- 网状模型
用网络结构表示实体类型及其实体之间联系的模型 - 数据库分层
- 逻辑层 : 模式
- 物理层 : 实际是数据存储
- 视图层 : 虚的概念
- 约束条件的写法
- 至少选三门不同的课
- $\pi$ 投影 select
- $\sigma$ 选择 where
- from 是不是连接??
- 至少选三门不同的课
- 给定关系模式和函数依赖,判断无损连接(使用表格法,P55 图3-9)
- 三范式分解
- 判断函数依赖最小集
- 把每个函数依赖的右边转换成单个属性
- 左边的多于属性去掉(求闭包)
- 除掉多余函数依赖(P45)
- 最小集中的每一个函数依赖作为一个分解
例如:AB->C, 得S1(A,B,C) - 判断是否具有无损连接性,是否包含所有属性
- 求解关键字(左属性,孤立属性,右属性,左右属性)
- 判断函数依赖最小集
- BC范式(几乎不考,选择题)
- ER图(简答题)
- 画 ER图
- 如果是一个多值属性,则需将该属性转换为实体集
类如工资,或者是队服颜色 - 关键字,外关键字
- 如果是一个多值属性,则需将该属性转换为实体集
- ER图转换成表
- 画 ER图
- 虚拟试图
- 故障恢复与并行控制
- 冲突可串行化的判断
- ACID 事务的基本特点
- undo/redo log
- 死锁的判断 (依赖图,是否有环)
- flush 数据库清理日志
- flush执行一系列 sql 语句,但不提交事务;
commit 方法先调用flush()方法,然后提交事务,提交事务意味着对数据库操作永久保存下来.
- flush执行一系列 sql 语句,但不提交事务;
- 两个关系R与S R与S的交集能写成什么?
R∩S=R-(R-S)
- 笛卡尔积用基本的关系代数表述
rlj
- 下列关于关系数据库的说法,哪一项是正确的?B
• A. 关系数据库不能存储视频或音频。(可以存储视频或音频)
• B. 表是由列和行组成的。
• C. 同一个表中的行可以拥有不同的列集。
• D. 行也称为表字段。(行也称记录,列有时也称字段和域)
2. 下列哪些是关系数据模型的组件?B
• A. 指针,集合,约束
• B. 关系,属性,元组
• C. 实例,记录类型,实体
• D. 表,行,等级
3. 下列哪一项表述是错误的?A
• A. 关系模型中的属性映射到关系数据库中的行 (记录映射成行)
• B. 在 ERD 中,用长方形表示实体(集)
• C. 一对一和多对多是可以在 ERD 中表示的关系
• D. 关系模型中的实体映射到关系数据库中的表
行可能是一个实体,列是属性
4. 应用程序 B 想要在同一事务中多次读取表 EMPLOYEE 中的行子集。为了保证每次
都能返回相同的行子集,应该使用哪种隔离级别?C
• A.当前落实
• B.读稳定性
• C.可重复读
• D.未落实读
5. 下列关于事务的说法,哪一项是错误的?A
• A.事务中的操作并行执行。
• B.同一个事务中只能执行 1 个 COMMIT 语句。
• C.事务会保证一组操作的原子性。
• D. ROLLBACK 或 COMMIT 语句可以终结事务。
6. 下列哪一项是事务的定义?A
• A. 组合在一起的一个或多个 SQL 操作序列,也被称为一个工作单元
• B. 一组可以并行执行的独立操作
• C. 一个数据隔离级别,可通过允许读取之前已落实的数据来防止死锁
• D. 一个 DB2 数据库对象
7. 以下哪种情况会发生脏读?C
• A. 一个事务读取了相同的数据行两次,并且每次都返回不同的数据值(不可重复读)
• B. 在一个事务期间,基于特定标准的搜索在执行连续搜索之后返回额外的行(幻影读))
• C. 返回了未落实的数据,但产生这些数据的事务已回滚
• D. 两个事务读取并试图更新相同的数据,第二次更新将在第一次更新落实之前将其覆盖
8. 下列哪一项是关于 DB2 授权的最佳描述?A
• A. 授权是一个过程,检查你是否具有足够的权限以执行所需的数据库操作
• B. 授权是一个过程,在此过程中 DBA 将收集相关信息以查看哪些人可以访问数据库
• C. 授权是一个过程,在此过程中 DB2 数据库将使用 Windows 安全机制来检查你是
否能够访问 DB2 数据库
• D. 授权是一个过程,它通过验证你的用户 ID 和密码来确认你是否是所声称的那个人
9. 下列哪一项不是恢复的类型?B
A. 版本恢复
B. 自动重启恢复
C. 崩溃恢复
D. 前滚恢复
10. 自动存储具备什么功能?A
• A. 自动存储允许用户指定数据库管理器用于存储表空间数据的路径,从而简化了存储管理。
• B. 自动存储是一种选项,它允许写入到数据库的事务自动落实。
• C. 自动存储是一种 DB2 功能,它允许按设定计划自动备份表。
• D. 自动存储可以用于自动重组物理介质上的数据,以提高性能。
11. 铁路售票系统要求客户在订票前可以允许客户查询但客户上次的查询结果必须出现在下次查询中,在售票系统中的事务隔离级至少应该是:C
A. Read Uncommitted B Read Committed
C. Repeatable Reads D. Serializable
12. 数据库管理系统的组成部分:
- 锁管理器
- 存储管理器
- 文件/索引/记录管理器
- 事务管理器
- 查询编译器
- 缓冲区管理器
- on update 和 on delete 后面可以跟的词语有四个no action , set null , set default ,cascade
- no action 表示 不做任何操作,
- set null 表示在外键表中将相应字段设置为null
- set default 表示设置为默认值
- cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除
有关系模式R(A,B,C,D),有函数依赖集F={A->B,D->C,A->C,D->A},下面哪个分解不具有无损连接性 D
A. ABC,AD B. ACD,BCD C.ABD,BD D.AD,AB下面哪个说法符合数据库系统WAL(log先写协议): D
A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
C.事务成功完成时不需要将与其相关的log页面强制写回磁盘
D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘在DBMS中执行GRANT REFERENCES(col1) ON TABLE t1 TO user user7,对于该语句下面哪个描述是正确的: C
A.user7可以在t1上定义视图
B.user7可以更新t1中的col1属性的值
C.user7在创建其他表时可以定义参考于t1中col1属性的外关键字
D.user7可以在t1中定义外关键字.下列哪一个说法是不正确的 (A) (关系模型)
A、层次模型是EF codd一种
B、数据的结构的结构模型的一部分
C、DBMS全称Database Management System
D、DBA的全称Database Administrator
18. 关于视图的描述中,说法正确的是(A)
A、在查询中视图可以用作表来使用
B、数据库对视图另外的保存数据
C、试图都是可以更新的
D、可更新视图都是可插入视图
19. 关于视图的描述下面说法哪些是正确的: A
A.数据库只存储视图的定义.
B.数据库为视图另外保存数据
C.视图都是可更新的
D.视图只能在一个关系上创建
20. 在数据库系统中,日志文件可以用于 D
A.保障事务的并发性 B.保障数据的安全性
C.检测系统的死锁 D.数据库故障的恢复
21. 下面哪个隔离级在读的时候不给任何数据加读锁的是:A
A.Read Uncommitted B. Read Committed
C. Repeatable Read D. Serializable
D.数据库重新启动时恢复系统中的分析阶段从检查点开始
- 创建视图
create view movieprod(t,n) as select title,name
from movies,movieexexc
where pc#=c# - 创建约束
club 数据库中定义一个合适的对象,能够实现下面的功能
当使用 insert 语句对 sailors 表插入记录时如果某些记录的 age 值小于 19,同时将这些 age 小于 19 的记录插入到 yangsaliors 表中。1
2
3
4
5
6
7create trigger ST
after insert on sailors
referencing
new row as newrow
for each row
when (new.age <19 )
insert into yangsaliors(sid,name,age) values(newrow.sid,new.name,new.age)
2012-2013
- 下列哪一个选项中的描述都可以作为E/R图中的实体集? D
A. 产品,颜色,高度
B. 黄色,大,长
C. 约翰,狗,飞机
D. 人,动物,植物
实体是某种抽象对象,相似实体的集合形成实体集.
实体集有相关的属性,属性是这个实体机中实体所具有的性质
联系是两个或多个实体集的连接
颜色,高度 应该算是一种属性
约翰,狗,飞机 是实体
下列哪一项表述是错误的? D
A.关键字唯一地标识表中的行。
B.外关键字是引用其他表主关键字的列集。
C.主关键字和外关键字用于强制数据完整性。
D.必须始终在表中定义主关键字。下列哪些实体集在ER图中应该使用一对多关系? D
A. 人, 汽车
B. 学生,课程
C. 学生,教师
D. 母亲,孩子如果使用下列语句创建 TAB1
CREATE TABLE tab1(c1 int not null,c2 int not null,
check (c1+c2>10))
下列哪个语句会将记录成功插入表 TAB1? C
A. INSERT INTO tab1 VALUES (0, 9)
B. INSERT INTO tab1 VALUES (null, 20)
C. INSERT INTO tab1 VALUES (4, 22)
D. INSERT INTO tab1 VALUES (20,null)check 这个是约束吗?
给定下列两个表
T1 | T2 | |||
---|---|---|---|---|
C1 | C2 | CA | CB | |
1 | 2 | a | b | |
3 | 4 | c | d | |
5 | 6 | |||
下列哪个查询语句会得到下面的结果 C? |
C1 C2 CA CB
1 2 a b
1 2 c d
3 4 a b
3 4 c d
5 6 a b
5 6 c d
A.select * from t1,t2 where t1.c1=t2.cb
B.select * from t1,t2 where t1.c2=t2.ca
C.select * from t1,t2
D.select * from t1 inner join t2 on t1.c1=t2.ca
我们在DBMS中记录员工和部门的管理信息,当一个部门的管理员辞职后,数据库需要自动将该部门的管理员信息填成空值,在定义管理关系表时我们对于外关键字的删除规则应定义为 C
A.ON DELETE CASCADE B.ON DELETE ROLLBACK
C.ON DELETE SET NULL D.ON DELETE NO ACTION执行下列 SQL 语句之后:
GRANT ALL ON TABLE student TO USER user1
假设用户 USER1 没有其他权限,下列哪一项操作是 USER1 可以执行的?D
A. 将其获得在表student上的所有权限赋予其他用户
B. 删除关联到表 STUDENT 的视图
C. 删除表 STUDENT D. 以上都不是下面视图定义是中哪个是可更新视图 我猜选D
A.Create view V1 as select S.rating , max(S.age) as avgage from Sailors S group by S.rating
B.Create view V2 as select * from saliros S1 where S1.age>18 expect select * from sailors S2 where S2.name like ‘%Tom’
C.Create view V3 as select S.name, R,bid. from Sailor S, Reserves R where S.sid=R.sid
D.Create view V4 as select * from Bailors B where B.name is not null
- (1) 若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。
- (2) 若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。
- (3) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。
可更新视图规则
- 有两个关系TAB1,TAB2
TAB1 TAB2
C1 C2 CX CY
A 11 A 21
B 12 C 22
C 13
结果集如下
C1 C2 CX CY
A 11 A 21
C 13 C 22
B 12 - -
哪个SQL语句能够生成该结果 D
A. SELECT * FROM tab1 right OUTER JOIN tab2 ON c1=cx
B. SELECT * FROM tab1 INNER JOIN tab2 ON c1=cx
C. SELECT * FROM tab1 FULL OUTER JOIN tab2 ON c1=cx
D. SELECT * FROM tab1 LEFT OUTER JOIN tab2 ON c1=cx
- 数据库系统管理员按照事务的方式执行下面的语句:
Create table tab1 (a int,b int)
insert into tabl values(1,2)
insert into tab1 values(2,3)
commit
Insert into tab1 values(2,3)
Insert into tab1 values(1,6)
rollback
Delete from tab1 where a=1
Insert into tab1 values(1,7)
数据库系统突然崩溃,系统重新启动后,该管理员执行
Select count() from tab1
数据库系统的输出是多少:*A**
A. 2 B.3 C.4 D.5
- 有关系模式R(A,B,C,D),其函数依赖集F={A->B,B->C,C->D,D->A},将关系模式R分解为AB,BC,CD后,哪个函数依赖丢失了?C
A. A->B B. B->C C. D->A D.没有函数依赖丢失
- 有两个关系T1,T2
T1 T2
C1 CX
A A
B C
结果集如下
C1
A
B
A
C
哪个SQL语句能够生成该结果 B
A.select * from t1 union select * from t2
B.select * from t1 union all select * from t2
C.select * from t1,t2
D.select * from t1 except select * from t2
union 默认是去重的,
如果要取消去重,要 加上 all关键字
假设关系模式R1(EMP_ID,EMP_NAME,PHONE,EMAIL,SALARY)
下列方法中,哪一个是限制用户查看 SALARY 信息但仍允许他们查看其他值的最简单方法?B
A. 加密表的数据
B. 创建不包含 SALARY 列的视图。赋予访问视图的权限,并撤销访问原始表的权限
C. 撤销不应查看 SALARY 数据的用户对 SALARY 列的 SELECT 访问权限
D. 将 SALARY 数据存储在其他表中,并赋予相应用户对该表的 SELECT 权限有关系模式R(A,B,C,D),有函数依赖集F={A->B,D->C,A->C,D->A},下面哪个分解不具有无损连接性 D
A. ABC,AD B. ACD,BCD C.ABD,BD D.AD,AB无损连接性就是能还原关系的意思
下面哪个说法符合数据库系统WAL(log先写协议): D
A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
C.事务成功完成时不需要将与其相关的log页面强制写回磁盘
D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘在JDBC提供的数据库编程方法中提供了几种JDBC和数据库的连接方法:C
A.5 B.2 C.4 D.1某数据库应用系统中,在tab1表上频繁出现where a=… ., where a=….and c=….这些查询条件,其中tab1表中的记录个数为1000万条。数据库中数据库管理员为了提高查询效率决定建立索引,请你选出最合适的索引 D
A. 在属性a上和属性(c,b)和属性(a,b,c)上分别建立索引
B. 在属性(a,c, b)上建立一个索引
C. 在属性a上和属性(a,b,c)分别建立索引
D. 在属性(a,c)上建立索引下面哪个调度是串行调度: B
A. T1:R(A),T2:R(B),T2:W(B),T1:W(A)
B. T1:R(B),T1:W(B),T2:R(A), T2:W(A)
C. T1:R(A),T2:R(B),.T1:W(A),T2:W(B)
D. T2:R(A),T1:R(B),.T1:W(A),T2:W(B)关于数据库管理系统下面哪个描述是最正确的 C
A.数据库管理系统是数据的集合.
B.数据库管理系统是数据的集合,并且存储着数据与数据之间的关系.
C.数据库管理系统是由一个互相关联的数据的集合和一组用以访问和管理这些数据的程序组成.
- 以下哪种情况会发生不可重复读?A
A. 一个事务读取了相同的数据记录两次,并且每次都返回不同的数据值
B. 在一个事务期间,基于特定标准的搜索在执行连续搜索之后返回额外的行
C. 返回了未落实的数据,但产生这些数据的事务已回滚
D. 两个事务读取并试图更新相同的数据,第二次更新将在第一次更新落实之前将其覆盖 - 在数据库中存储的是 C
A.数据 B.数据模型
C.数据以及数据之间的联系 D.信息
二.名称解释(每题3分,共15分)
- 主关键字
主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键或多字段主键。又称主码。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
2.BC范式
BCNF
设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
- 关系模式分解的无损连接性
对关系模式分解时,原关系模式的任何一个合法的关系值在分解之后应该能通过自然连接运算恢复起来,这就是无损连接所要解决的问题。
数据库
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据
事务原子性
事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的任何操作都必须被撤销,让数据库返回初始状态。
拓展:
- 事务ACID四大特性:
- 原子性
-定义:事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的任何操作都必须被撤销,让数据库返回初始状态。- 实现:事务内的一组操作全部成功(或者全部失败),为了实现原子性,就需要通过日志:将所有对数据的操作都写入日志,如果事务中的一部分操作已经成功,但后面部分操作,因为系统断电,操作系统崩溃等问题而没有成功执行,那么就要通过回溯日志,将前面已经成功执行的操作撤销,从而达到”全部执行失败”的效果。
- 一致性:
- 事务操作成功后,保证数据不会被破坏
- 如A账户转账100元到B账户,不管操作成功与否,A和B账户的存款总额是不变的。一致性分为数据库外部一致性和内部一致性:
- 数据库外部一致性:由外部的应用编码来实现,即银行的应用在进行转账的操作时,必须在同一事务内部调用对账户A和账户B的操作。如果在这个阶段出现错误,这不是数据库本身能解决的,也不属于我们要讨论的范围。
- 数据库内部的一致性:在同一个事务内部的一组操作必须全部成功(或者全部失败) 这就是事务原子性
- 持久性:
- 一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中。即使在事务提交后,数据库马上崩溃,在数据库重启时,也必须保证能够通过某种机制恢复数据。
- 隔离性:
点击阅读隔离
- 原子性
简答题(共45分)
有关系模式students(sid,sname,age,grade,class), course(cid, cname), enroll(sid,cid, score). students记录学生的基本信息,在students中sid表示学生的学号,sname表示学生的姓名,age表示年龄,grade表示年级,class表示班级,sid是students的主关键字.Course记录课程信息,cid为课程编号,cname表示课程名称,cid为course的主关键字.Enroll表示学生的选课信息,sid表示学号,cid表示课程编号,score表示成绩,sid,cid共同组成enroll的主关键字,sid为指向students的外关键字,cid为指向course的外关键字
1.请用关系代数写出下面的查询
查找年龄最小的学生姓名 (5分)
差不多就这个意思
重命名为S2 (sname2,age2)
S3:=Πsname(S∞(age>age2)S2)
R4:= S(name)-S3(name)
2.请用元组关系演算写出下面的查询
查找年龄小于19而且数据库课程的成绩高于89的学生姓名(5分)
请用SQL语句写出下面的查询
4. 查找即选了’数据库原理’课程而没有选’web开发’课程的学生姓名(5分)
select sname from course c,students s,enrool r
where cname = ‘数据库原理’
and s.sid=r.sid
and c.cid=r.cid
except
select sname from course c,students s,enrool r
where cname = ‘数据库原理’
and s.sid=r.sid
and c.cid=r.cid
- 统计2011级每个班中数据库课程不及格的人数 (5分)
select count(*)
from course c,students s,enrolled r
where grade = 2011
and cname = ‘数据库原理’
and s.sid=r.sid
and c.cid=r.cid
and score < 60
- 显示在2011级各班中在数据库原理课程上平均分最低的班级和平均分(5分)
select min()
avg(score) as avg(score)
group by class
- 统计选了数据库课程的平均分,最高分和最低分(5分)
avg(score),max()
- 请根据下面的要求画出ER图(5分)
某个企业的数据库中记录以下信息:1.员工(ssn,name,lot)员工编号ssn唯一确定一个员工,2.部门(did,dname,buget)部门编号did唯一确定一个部门,3.员工与部门的管理关系,每个部门有且仅有一个管理者。
一个员工实体集,ssn是主键 (矩形)
一个部门实体集,did是主键 (矩形)
一个 manage 关系, 剪头指向 部门 (菱形)
需不需要用弧线?
- 有关系模式R(ABCD),R上的函数依赖集F={ A->C,C->A,B->AC,D->AC,BD-.A },请将R分解成满足第三范式的关系模式,要求该分解具有无损连接性和依赖保持性(10分)
关系数据库设计理论
关系的键 : 一个或多个属性集 {…}; 当键只包括单独的属性A时,称A(而不是{A})是键
- 不可能存在两个不同元组具有相同的{…}
- 键必须是最小的,ok!
超键 : 不满足上述条件的第二种情况.
主属性: 包含在任一候选关键字中的属性称主属性。
非主属性: 不包含在主码中的属性称为非主属性。
函数依赖FD:
例:身份证号→姓名。
A → B
感觉就是 已知 A 可以推出 B (A可能就是键值吧)
至于是谁依赖谁呢?部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
完全函数依赖:在R(U)中,如果Y函数依赖于X,并且对于X的任何一个真子集X’,都有Y不函数依赖于X’, 则称Y对X完全函数依赖。否则称Y对X部分函数依赖。
- 平凡函数依赖 : 例如: A,B,C -> A,B
右边是左边的子集
【例】:
举个例子就明白了。假设一个学生有几个属性
SNO 学号 SNAME 姓名 SDEPT系
SAGE 年龄 CNO 班级号 G 成绩
对于(SNO,SNAME,SDEPT,SAGE,CNO,G)来说,G完全依赖于(SNO, CNO), 因为(SNO,CNO)可以决定G,而SNO和CNO都不能单独决定G。
而SAGE部分函数依赖于(SNO,CNO),因为(SNO,CNO)可以决定SAGE,而单独
SNO也可以决定SAGE。- 平凡函数依赖 : 例如: A,B,C -> A,B
传递函数依赖:
设R(U)是属性集U上的关系,x、y、z是U的子集,在R(U)中,若x→y,但y→x,若y→z,则x→z,称z传递函数依赖于x,记作X→TZ。
如果X->Y, Y->Z, 则称Z对X传递函数依赖。计算X+(属性的闭包)算法:
a.初始化,令X+ = X;
b.在F中依次查找每个没有被标记的函数依赖,若“左边属性集”包含于X+ ,则令 X+ = X+∪“右边属性集”, 并为访问过的函数依赖设置标记。
c.反复执行b直到X+不改变为止。检验给定的任意函数依赖A1A2…An->B是否蕴含于依赖集S:
分析:
根据属性集闭包的定义,可知A1A2…An->{A1,A2,…,An}+ 蕴含于S。只要证明B在{A1,A2,….,An}+中,那么函数依赖A1A2…An->B肯定蕴含于依赖集S中
求解过程:
(1) 利用依赖集计算闭包
(2) 如果B在闭包中,则函数依赖A1A2…An->B是否蕴含于
依赖集S,否则不蕴含于S
【例】:
最小化基本集 : 不可能包含平凡FD
- B中所有FD的右边均为单一属性
- 从B中删除任何一个FD后,该集合不再是基本集
- 对于B中任何一个FD,如果从其左边删除一个或者多个属性,B将不再是基本集
Armstrong公理
自反律:自己推自己 A->A
增广律 A->B 怎 AC->BC
传递律 A->B B->C 则A->C
总结:
判定函数依赖X→Y是否能由F导出的问题, 可转化为求X+并判定Y是否是X+子集的问题。
即求F闭包的问题可转化为求属性集闭包的问题。
函数依赖的闭包:
定义:若F为关系模式R(U)的函数依赖集,我们把F以及所有被F逻辑蕴涵的函数依赖的集合
称为F的闭包,记为F+
求函数依赖闭包,基于函数依赖推理规则
函数依赖推理规则:
若XY->Z,则X->Z,Y->z (错)
正确的:
若X->Y, 则XZ->YZ
若X->Y,X->Z,则X->YZ
若X->Y,Z属于Y,则X->Z
若X->Y,Y->Z,则X->Z
若X->YZ,则X->Y,X->Z //可以把每个函数依赖的右边的属性分解,从而使其右边只出现一个属性
伪传递率:
若A->B,BC->D,则AC->D
- 异常
- 冗余
- 更新异常
- 删除异常
- 分解关系
一般用分解关系的方法来消除异常4
第一范式(1NF):属性,属性值,字段不可分
就是无重复的列
如果一个关系模式R的所有属性都是不可分的基本数据项
不满足1NF的数据库就不是关系数据库
不可以表中有表
第二范式(2NF):符合1NF,每一个非主属性完全依赖于码,不能存在部分依赖,有主键,非主键字段依赖主键; 唯一性 一个表只说明一个事物;
例:
不符合第二范式的例子:
表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;
这个表明显说明了两个事务:学生信息, 课程信息;
存在问题:
数据冗余,每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全删除了;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整。
修正:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
满足第2范式只消除了插入异常。
第三范式(3NF):
符合2NF,并且,消除传递依赖,非主键字段不能相互依赖; 每列都与主键有直接关系,不存在传递依赖;
若所有的属性都是主属性,则属于第三范式
要求一个数据库表中不包含已在其它表中已包含的非主关键字信息
【例】:
不符合第三范式的例子:
学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字”学号”;
存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)
存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
删除异常
修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
- 1nf:不可分
- 2nf:一个表说明一个事物,唯一性
- 3nf:对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
BCNF是3NF的改进形式
BCNF意味着在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性组A能够决定任何一个属性B,则A的子集中必须有候选键。BCNF范式排除了任何属性对候选键的传递依赖与部分依赖。
- 满足BCNF条件
- 1 所有非主属性对每一个候选键都是完全函数依赖;
- 2 所有的主属性对每一个不包含它的候选键,也是完全函数依赖;
- 3 没有任何属性完全函数依赖于非候选键的任何一组属性。
候选键(又称候选码,候选关键字,码 ,candidate key)
设K是一个R(U)中的属性或属性集合(注意可以是属性集合,也即多个属性的组合),若K完全函数确定U,则K为R的候选键(Candidate key);
通俗地说就是,能够确定全部属性的某个属性或某组属性,称为候选键。若候选键多于一个,则选定其中一个作为主键。
在所有依赖关系右边没有出现的属性一定是候选键的成员。
BCNF范式排除了任何属性对候选键的传递依赖与部分依赖。
习题
设有关系模式R(A,B,C,D,E,G)上的函数依赖集为:
F={ A→B,B→C,AD→G,D→E } 。求解:
31. 求关系模式R的所有侯选键。
解: 求出侯选键AD。(2分)
首先在F中函数依赖右边不出现的属性必在侯选键中,即AD (1分);由于(AD)+=ABCDEG, 即AD能函数决定所有的属性, 所以侯选键只有一个 AD(1分) 。 AD+=AD BEG C
32. 分别求属性集G、AD、CD、BC的闭包。
G+=G(1分); (AD)+=ABCDEG(1分);
(CD)+= CDE(1分);(BC)+=BC(1分)
33. 将关系模式R保持依赖地且无损地分解成3NF,要求写出分解过程。
解:F={ A→B,B→C,AD→G,D→E }
F是最小依赖集,所有属性在F中出现,将F中是每个函数依赖组成一个关系模式得保持函数依赖的分解:{AB,BC,ADG, DE} (2分); 并上一个侯选键{AD}得无损分解:
{AB,BC,ADG,DE}∪{AD}={ AB,BC,ADG,DE } (2分)
F={ A→B,B→C,AD→G,D→E }
34. 将关系模式R无损地分解成BCNF,要求写出分解过程。
解:根据转换为BCNF的无损连接分解算法6.5 1)由于候选键为AD,
F中存在不符合BCNF要求的函数依赖,所以R不是BCNF,
选 A→B 分解为:R1=AB,R2=ACDEG ;(1分)
R1上保持的函数依赖集为A→B,键为A,所以是BCNF;
R2 上保持的函数依赖集为A→C,AD→G,D→E,键为AD,所以不是BCNF; (1分)
选A→C进一步分解为:R21=AC,R22=ADEG;(1分) R21上保持的函数依赖为A→C,键为A,所以是BCNF;
R22上保持的函数依赖为AD→G,D→E键为AD,所以不是BCNF; 选D→E进一步分解为:R221=DE,R222=ADG;(1分) R221上保持的函数依赖为D→E,键为D,所以是BCNF; R222上保持的函数依赖为AD→G,键为AD,所以是BCNF;
最后得保持无损连接特征的分解:{R1,R21,R221,R222}或表示为{AB,AC,DE,ADG}(1分)
注:由于选择不符合BCNF要求的函数依赖有多个,因此选择次序可有不同,最后的结果也不同,原则上按上述评分标准分步给分。
35. 说明分解ρ={R1,R2},R1(ABC)、R2(ADEG)的范式级别并说明理由
答:R1是2NF (1分),R2是1NF;(1分)
R1上的函数依赖集为:A→B,B→C,码为:A,不存在部分依赖,存在非主属性C对码A的传递依赖。(1分)
R2上的函数依赖集为:AD→G,D→E码为:AD,存在非主属性E对码AD的部分依赖。。(1分)
ρ={R1,R2},R1(ABC)、R2(ADEG)
关系模型基础:
- 属性 : 关系的列命名为属性,属性出现在列的顶部;属性用来表述所在列的项目的语义
- 模式 : 关系名和其属性集合的组合称为这个关系的模式;
- 元组 : 关系中除含有属性名所在行以外的其他行称为元组;
每个元组均有一个分量对应于关系的每个属性 - 域 : 一个特殊的元素属性 (数据类型)
- 关系是元组的集合,而不是元组的列表,关系中元组出现的顺序不是实质问题.
- 关系上的键 :
- 修改关系模式
- DROP TABLE R;
- ALTER TABLE Moive ADD phone char(16);
- ALTER TABLE Moive DROP phone;
- 默认值
- gender char(1) default ‘?’,
- birthdate date default date ‘0000-00-00’,
- 键的声明
可声明一个或者一组属性是键- PRIMARY KEY (属性不能有null值)
- UNIQUE (null值是允许的)
- 外键
代数查询语言
- 关系上的集合操作
- 并 R∪S
- 交 R∩S
- 差 R-S
- 投影 π a1,a2,…(R)
ok领会!
a1,a2…是要投影的列 - 选择
σc(R) C是条件 - 笛卡尔积 R × S
领会 - 自然连接
R ∞ S (用∞代替那个符号了)- 要求: 连接时相应的元组必须在某些方面一致.(属性名字吗?)
- 如果一个元组不能和另外关系中的任何一个元组配对的话,这个元组就被称为悬浮元组
- θ连接
R ∞c S
上面提到了C指的是条件
θ连接也就是满足某种条件的笛卡尔积 - 命名和重命名
ρs(R)
ρs(A1,A2,…An)(R)
把S改成名为R的关系 - 操作之间的关系
- R ∩ S = R - (R - S)
- R ∞c S = σc(R × S)
- 自然连接和笛卡尔积的连接就不必写了把
- 代数表达式的线性符号
- 关系的名字和用圆括号括起来的关系属性的列表.名字Answer习惯性表示最后一步运算的结果,也就是在表达式树根节点上的关系名
- 赋值符号 :=
- 赋值号右边的任何代数表达式,可以采用每个赋值语句只用一个算符的方法.也可把几个代数运算组合到一起写到表达式的右端.
- 关系上的约束
- R=ø 表示 R的值必须为空的约束 与 “R中没有元组等价”
- R ⊆ S 表示”任何在R中出现的元组都必须在S中出现”的约束
也可写成R - S = ø - 引用完整性约束是一种普通的约束.
某个上下文出现的值也必须在另外相关的上下文中出现
领悟! - 键约束 没有任何两个元组在键分量上具有相同的值
- 其他约束: 略懂; 满足某些条件的关系代数表达式 等于ø 或 ⊆关系
数据库语言SQL
select L (表达式列表)
from R (关系)
where C (条件)
投影
选择
模式匹配
- s LIKE p (p是模式)
_表示可匹配一个字符
%表示可匹配任何形式字符串
- s LIKE p (p是模式)
输出排序
在select-from-where语句后加上
order by- (默认序是升序)
DESC(表示降序), ASC(表示升序,可省略)SQL中的积和连接
消除属性歧义
A.a B.a元组变量
A as A多关系查询的解释
- 嵌套循环
- 并行赋值
- 转换为关系代数
查询的并,交,差(查询应该分别用括号括起来)
- UNION ∪
- INTERSECT ∩
- EXCEPT -
子查询
- 产生标量值得子查询
- 关系得条件表达式
- EXISTS R
- s IN R
- s > ALL
- s > ANY
- 元组的条件表达式
- 关联子查询
- FROM子句中的子查询
- SQL的连接表达式
- cross join 交叉连接
- join R on θ连接
- natural join R 自然连接
- natural full outer join 外连接
natural left outer join
natural right outer join
全关系操作
- 消除重复
SELECT DISTINCT (实际上从关系中消除重复的代价非常昂贵) - 并,交,差
若要消除重复元组,必须在UNION,INTERSECT和EXCEPT后跟上保留字ALL即可
如: R intersect all S - 聚集操作符
- SUM
- AVG
- MIN
- MAX
- COUNT
- 分组 GROUP BY name
- 分组,聚集和空值
空值不对求和,取平均和计数做贡献,也不能是列的最大值或最小值 - HAVING子句
- 消除重复
数据库更新
- 插入
insert into R(A1,A2…An) values (v1,v2…vn); - 删除
delete from R where <条件>; - 修改
update R set<新值赋值> where <条件>;
||运算符表示字符串的连接
- 插入
SQL中的事务
- 可串行化
- 原子性
- 事务
- START TRANSACTION可用来标记事务的开始
- SQL语句COMMIT使得事务成功结束.
- SQL语句ROLLBACK使得事务夭折或不成功结束,任何由该事务的SQL语句所引起的修改都被撤销,即它们被回滚 rooled back,
- 只读事务 (即它不会修改数据库,)
SET TRANSACTION READ ONLY
这条语句必须在事务开始之前执行.可以通过如下语句通知SQL下一个事务可以写数据:
SET TRANSACTION READ WRITE;
不过,这个选项是默认选项 - 读脏数据
- 脏数据: Dirty data 是表示还没有提交的事务所写的数据的通用术语
- 脏读 : 是对脏数据的读取
- SQL允许指定一个给定的事务是否可以脏读:
SET TRANSACTION READ WRITE
上述语句做了两件事:ISOLATION LEVEL READ UNCOMMITTED;
- 第一行声明事务可以写数据
- 第二行声明事务用读未提交的”隔离层次”运行,即允许事务读脏数据
- 其他隔离层次
共享锁和排他锁
日志的flush,书上例子,output
约束与触发器
键和外键
外键声明隐含的两层意思
两种声明外键的方法
a) 在属性的名字和类型后加 references <表名> (<属性名>)
b) create table语句的属性列表上追加一个或多个声明
foreign key (<属性名列表>) reference <表名> (<属性名列表>)维护引用完整性
- 缺省原则
- 级联原则
- 置空值原则
ON DELETE SET NULL
ON UPDATE CASCADE
延迟约束检查
创建表时候在外键后添加缺省
DEFERRABLE
NOT DEFERRABLE
后可有
INITIALLY DEFERRED 检查仅被推迟到事务提交前执行,
或 INITIALLY IMMEDIATE 选项. 检查在每个语句后都立即被执行
SET CONSTRAINT Myconstraint deferred
属性和元组上的约束
- 在单一属性上的约束
- 在整个元组上的约束
- 非空值约束
- 基于属性的CHECK约束
- 基于元组的CHECK约束
修改约束
- 给约束命名
在约束前加保留字CONSTRAINT和约束的名字 - 修改表上的约束
- 给约束命名
断言 :
创建断言
CREATE ASSERTION <断言名> CHECK (<条件>)使用断言
删除断言
DROP ASSERTION (<断言名>)
触发器
有事也称为 事件-条件-动作规则.或者ECA规则虚拟视图
- 视图的定义:
CREATE VIEW <视图名> AS <视图定义>
视图定义是一个SQL查询 - 视图查询
- 属性重命名
- 视图的定义:
视图更新
视图删除
DROP VIEW ParamountMovies
删除视图不会影响基本关系Movies
但是删除表MOVIES 不但使得表Movies 从此消失,也使得视图不可用可更新视图
该视图是由单个关系R选取出得一些元素组成- WHERE 子句在子查询中不能使用关系R
- FROM语句只能包含一个关系R,不能再有其他关系
- SELECT语句中的属性列表必须包括足够多的属性,以保证对该视图进行元组插入时,能够用NULL或者适当的默认值来填充所有其他不属于该视图的属性.
比如,SELECT语句中不允许包括被定义为非空或者没有默认值的属性.
视图中的替换触发器
可以用INSTEAD OF 代替BEFORE,AFTER
索引:
一个表最多建一个索引- 定义:关系中属性A的索引时一种数据结构,他能提高在属性A上查找具有某个特定值的元组的效率.
- 建立索引的动机
当关系变得很大时,通过扫描关系中所有的元组来找出那些匹配给定查询条件的元组的代价太高. - 索引的声明
CREATE INDEX 索引名 ON movies(year,title);
DROP INDEX 索引名.
索引的选择
索引的选择时衡量数据库设计成败的一个重要因素.设计索引主要考虑两个因素:
1)如果属性上存在索引,则为该属性指定一个值或者取值范围能极大地提高查询的执行效率.同样,如果查询涉及该属性上的连接操作,也能带来性能上的改善另一方面,为关系上的某个属性或者某个属性集建立的索引会使得对关系的插入,删除,和修改变得更复杂和更费时.
简单代价模型
一些有用的索引:
- 在查询中未主键指定值时比较普遍的,因此键上的索引通常会被频繁地使用
- 因为键值时唯一的,故与给定键值匹配的元组最多只有一个,因为索引返回的要么是这个元组的位置,要么什么也不返回.
- 存在两种情况,即使不是建立在键属性上的索引页仍然有效
几乎可以看成是键
元组在该属性上是聚集的.
- 存在两种情况,即使不是建立在键属性上的索引页仍然有效
- 计算最佳索引
- 所以的自动选择
物化视图(不考)
存储过程 :
创建PSM函数和过程
- 过程声明要素:
CREATE PROCEDURE <名字> (<参数>)
<局部声明>
<过程体>; - 函数定义的要素:
CREATE FUNCTION <名字> (<参数>) RETURNS <类型>
<局部声明>
<函数体>; - 参数是 模式-名字-类型
例如: IN oldAddr VARCHAR(255)
- 过程声明要素:
PSM中的简单语句格式
- 调用语句
CALL <过程名> (<参数>) - 返回语句
- 局部变量声明
declare <名字><类型>; - 赋值语句
set <变量>=<表达式>; - 语句组
begine…end - 语句标号
用名字(标号名)和冒号作为前缀来标识语句
- 调用语句
分支语句
- 用保留字END IF结束
- 嵌套在if语句中的else子句以单词ELSEIF开始
PSM中的查询
- 声明和使用游标
a)语句中不出现EXEC SQL
b)局部变量不适用冒号前缀
- 声明和使用游标
PSM中的循环
LOOP
<语句列表>
END LOOP;
中断循环: LEAVE<循环标识>for 循环
PSM中的异常处理
使用PSM函数和过程
权限
九种类型的权限:
- select,insert,delete,update 应用到关系上
- reference权限是指在完整性约束下引用关系的权力
- usage 关系和断言之外的多种模式元素上.
- trigger 触发器的权限
- execute PSM过程或函数之类的代码权限
- under 创建给定类型的子类型权限
创建权限
检查权限的过程
授权
授权语句的格式如下:
GRANT <权限列表> ON <数据库元素> TO <用户列表>
其后可以加上with grant option.
ALL PRIVILEGES可能在这里出现授权图
收权
REVOKE <权限列表> ON <数据库元素> FROM <用户列表>数据库教父—-E.F.Codd
关系层次模型提出?DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS
DBA : 数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称
关系规范性算法(闭包,函数依赖的投影,BC范式的分解
2范式消除了部分依赖,1范式:原子非多值
3范式消除了传递依赖函数依赖集合,不是关系R的键:算闭包
BC范式能否保持无损连接,三范式
分关系代数(注意不是sql语句)
关系代数表示约束,用两种方式表达,等于空集或者属于给一个调度(并行化,并发控制)
什么叫做冲突的(两个事务对同一个对象的写操作(至少一个)
如何判断调度是不是可串行化的(画优先图);
关于日志恢复的问题,日志分三种类型,考undo,redo日志,
写出数据库的恢复子系统,恢复的过程,以及恢复之后是什么样子;
两阶段锁协议,书上例题,保证不会发生死锁;
数据库恢复技术
事务的基本概念
1.定义:
一个数据库操作序列
一个不可分割的工作单位
恢复和并发控制的基本单位2.显示定义方式:
COMMIT事务正常结束
提交事务的所有操作
事务中所有对数据库的更新写回磁盘上的物理数据库中.
ROLLBACK
事务异常终止
事务运行的过程中发生了故障,不能继续执行
系统将事务中对数据库的所有已完成的操作全部撤销
事务滚回到开始时的状态
BEGIN TRANSACTION | BEGIN TRANSACTION |
---|---|
SQL语句1 | SQL语句1 |
SQL语句2 | SQL语句2 |
… | … |
COMMIT | ROLLBACK |
3.隐式定义:
当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务4.事务的特性(ACID特性)
- 原子性 (Atomicity)
- 一致性 (Consistency)
- 隔离性 (Isolation)
- 持续性 (Durability)
- 保证事务ACID特性是事务管理的重要任务。
- 事务ACID特性可能遭到破坏的因素是:
1)多个事务并行运行时,不同事务的操作交叉执行
2)事务在运行过程中被强行终止
数据库管理系统要解决的问题:
必须保证多个事务的交叉运行不影响这些事务的原子性
必须保证被强行终止的事务对数据库和其他事务没有任何影响
这两个问题就是数据库管理系统的恢复机制和并发控制机制的责任
数据库恢复概述
故障时不可避免
- 计算机硬件故障
- 软件的错误
- 操作员的失误
- 恶意的破坏
故障的影响
- 运行事务非正常中断,影响数据库中数据的正确性
- 破坏数据库,全部或部分丢失数据
数据库的恢复
DBMS把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复管理系统对故障的对策
恢复子系统是数据库管理系统的一个重要组成部分
恢复技术是衡量系统优劣的重要指标
故障的种类
1.事务内部的故障
两个更新操作要么全部完成要么全部不做。否则就会使数据库处于不一致状态,例如只把账户甲的余额减少了而没有把账户乙的余额增加。在这段程序中若产生账户甲余额不足的情况,应用程序可以发现并让事务滚回,撤销已作的修改,恢复数据库到正确状态
事务内部更多的故障是非预期的,是不能由应用程序处理的。
- 运算溢出
- 并发事务发生死锁而被选中撤销该事务
- 违反了某些完整性限制而被终止等
事务故障的恢复:撤消事务(UNDO)
- 强行回滚事务
- 撤销该事务已经做出的任何对数据库的修改,使得该事务像根本没有启动一样.
2.系统故障(软故障)
指造成系统停止运转的任何事件,使得系统要重新启动- 特定类型的硬件错误(如CPU故障)
- 操作系统故障
- DBMS代码错误
- 系统断电
系统故障的影响
- 整个系统的正常运行突然被破坏
- 所有正在运行的事务都非正常终止 (所有活跃事务都只运行了一部分,没有全部完成)
- 内存中数据库缓冲区的信息全部丢失(部分已完成事务更新后的数据还在缓存区,没有来得及刷到硬盘上,这些更新就丢失了)
- 不破坏数据库
系统故障的恢复
- 发生系统故障时,事务未提交 (恢复策略:强行撤消(UNDO)所有未完成事务)
- 发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。(恢复策略:重做(REDO)所有已提交的事务)
系统故障的恢复需要做两件事情:
1.撤销所有未完成的事务
2.重做所有已提交的事务
- 介质故障(硬故障,指外存故障)
- 磁盘损坏
- 磁头碰撞
- 瞬时强磁场干扰
- 介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务
- 截至故障比前两类故障的可能性小得多,但破坏性大得多
- 介质故障的恢复
- 装入数据库发生介质故障前某个时刻的数据副本
- 重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库
- 计算机病毒
- 故障小结
对各类故障,对数据库的影响有两种可能性:- 数据库本身被破坏
- 数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的
- 恢复操作的基本原理: 冗余
利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据 - 恢复的实现技术: 复杂
问: 系统故障会导致什么问题?
恢复的实现技术
恢复机制涉及到的关键:
- 如何建立冗余数据
- 数据转储
- 登陆日志文件
- 如何建立冗余数据
数据转储
- 转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程
- 备用的数据成为后备副本或后援副本
- 数据库遭到破坏后可以将后备副本重新装入
- 重装后备副本只能将数据库恢复到转储时的状态
- 要想恢复到故障发生时的状态,必须重新运行自转储后的所有更新事务
转储方法
- 静态转储
- 系统中无运行事务时进行的转储操作
- 转储期间不允许对数据库进行操作
- 转储开始时数据库处于一致性状态
- 得到的一定是一个数据一致性的副本
优点:实现简单
缺点:
- 静态转储
1.降低了数据库的可用性
2.转储必须等待正运行的用户事务结束
3.新的事务必须等转储结束
- 动态转储
- 转储操作与用户并发进行
- 转储期间允许对数据库进行存取或修改
优点:
1.不用等待正在进行的事务结束
2.转储期间允许对数据库进行存取或修改
缺点:不能保证副本中的数据正确有效
动态转储进行故障恢复
需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态海量转储
每次转储全部数据库增量转储
只转储上次转储后更新过的数据
海量转储与增量转储的比较
1.从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
2.如果数据库很大,事务处理又十分频繁,则增量转储更有效
- 登陆日志文件
- 1.日志文件
记录事务对数据库的更新操作文件 - 格式:
- 以记录为单位的日志文件(事务标识,操作类型,操作对象,更新前数据的旧值,更新后数据的新值)
- 以数据为单位的日志文件(事务标识,被更新的数据块)
- 内容:
- 各个事务的开始标记
- 各个事务的结束标记
- 各个事务所有的更新操作
- 作用:
- 进行事务故障恢复
- 进行系统故障恢复
- 协助后备副本进行介质故障恢复
2.利用静态转储副本和日志文件进行恢复
对上图进行说明:
- 系统在Ta时刻停止运行事务,进行数据库转储
- 在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本
- 系统运行到Tf时刻发生故障
- 为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复到Tb时刻的状态
- 重新运行自Tb~Tf时刻的所有更新事务,把数据库恢复到故障发生前的一致状态
- 登记日志文件
基本原则:登记的次序严格按并行事务执行的时间次序
必须先写日志文件,后写数据库
恢复策略
- 事务故障的恢复
事务故障:事务运行至正常终止点前被终止
恢复方法:由恢复子系统利用日志文件撤销(UNDO)此事务已对数据库进行的修改
注: 事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预
恢复步骤:
- 反向扫描文件日志(从后往前扫描),查找该事务的更新操作
- 对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库
- 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
- 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
系统故障的恢复
- 系统故障:
- 未完成事务对 数据库的更新已写入数据库
- 提交事务对数据库的更新还留在缓存区没来得及写入数据库
- 恢复方法:
- UNDO故障发生时未完成的事务
- Redo已完成的事务
注:系统故障的恢复由系统在重新启动时自动完成,不需要用户干预
- 系统故障:
恢复步骤:
- 正向扫描日志文件(
1.将在故障发生前已经提交的事务加入重做(REDO)队列,这些事务既有begin transaction记录,也有commit记录;
2.将在故障发生时未完成的事务加入撤销(Undo)队列,这些事务中只有begin transaction记录,无相应的commit记录)- 撤销(Undo)队列事务进行撤销(Undo)处理(1.反向扫描日志文件,对每个undo事务的更新操作进行逆操作;2.将日志记录中“更新前的值”写入数据库)
- 对重做(Redo)队列事务进行重做(Redo)处理(1.正向扫描日志文件,对每个REDO事务重新执行登记的操作;2.将日志记录中“更新后的值”写入数据库)
介质故障的恢复(需要DBA介入)
- 重装数据库
- 装入有关的日志文件副本,重做已完成的事务
具有检查点的回复技术
- 解决问题:
- 搜索整个日志将耗费大量的时间
- REDO处理:重新执行,浪费了大量时间
- 解决方法
- 在日志文件中增加检查点记录
- 增加重新开始文件
- 恢复子系统在登录日志文件期间动态地维护日志
建立检查点:
恢复子系统可以定期或不定期地建立检查点,保存数据库状态
1.定期:按照预定的一个时间间隔,如每隔一小时建立一个检查点
2.不定期:按照某种规则,如日志文件已写满一半建立一个检查点
恢复:
T1:在检查点之前提交
T2:在检查点之前开始执行,在检查点之后故障点之前提交
T3:在检查点之前开始执行,在故障点时还未完成
T4:在检查点之后开始执行,在故障点之前提交
T5:在检查点之后开始执行,在故障点时还未完成
利用检查点的恢复步骤
- 1.从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录
- 2.由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST
- 建立两个事务队列
undo-list
redo-list
把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
- 建立两个事务队列
- 3.检查点开始正向扫描日志文件,直到日志文件结束
如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列
如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列 - 4.对UNDO-LIST中的每个事务执行UNDO操作
对REDO-LIST中的每个事务执行REDO操作数据库镜像
2016-2017(如有错误,敬请指正??是应该这样说哈)
一、单项选择题(25 题,每题 2 分)
以下哪个选项是对脏读的描述?C
A.一个事务先后执行多次相同条件的查询,并且每次返回的数据都不相同。(不可重复读)
B.在一个事务期间,基于特定标准的搜索在执行连续搜索之后返回额外的行(幻影??)
C.一个事务读了另外一个事务修改还未提交的数据.(脏读)
D.两个事务读取并试图更新相同的数据,第二次更新将在第一次更新落实之前将其覆盖C
如果使用下列语句创建tab1 CREATE TABLE tab1(
col1 INTEGER NOT NULL, col2 CHAR(3),
CONSTRAINT cst1 CHECK (col1 in (1,2,3,4)))
下列哪个语句会将记录成功插入表 TAB1? C
A.INSERT INTO tab1 VALUES (0, ‘a’)
B.INSERT INTO tab1 VALUES (NULL, ‘abc’)
C.INSERT INTO tab1 VALUES (4, ‘a’)
D.INSERT INTO tab1 VALUES (4, ‘abcdefhijklmnopq’)数据库管理员需要在T1表中定义一个外关键字参考与T2表,下面描述正确是:C
A.在T1中外关键字属性可以是T2表的某个关键字属性的真子集。
B.在T1中外关键字属性名称必须与T2表的某个关键字属性名称相同。
C.在T1中外关键字属性的数据类型必须与T2表的某个关键字属性的数据完全相同(包括字符串的长度也要相同)
D.在T1中外关键字属性不能为空。(可以为空)有T1和T2两个表,数据如下:
T1 T2
C1 C2 C1 C2
5 4 5 1
5 2 5 2
5 5 5 3
下面哪个查询能够返回以下结果 (减法 B)
C1 C2
5 4
5 5
A.SELECT * FROM T1 MINUS SELECT * FROM T2
B.SELECT * FROM T1 EXCEPT SELECT * FROM T2
C.SELECT * FRM T2 UNION EXCEPT SELECT * FROM T1 (这是啥玩意??没见过)
D.SELECT * FROM T1 NOT EXISTS SELECT * FROM T2
- 下面哪个SQL语句可以引起触发器运行? C
A. DROP B. ALTER
C. DELETE D. ROLLBACKupdate,delete,insert三种触发器
create trigger st
after update on <表名>
referencing
new row as newrow
for each row
when()
下面关于索引说法正确的是? B
A.索引可以提高insert语句的执行速度。
B.索引可以提高某些select语句的执行速度。
C.索引可以提高所有select语句的执行速度。
D.索引属性值不能为空。张三需要在t1表上创建一个视图,在t1表上他最少需要什么权限: D
A. insert B. delete
C. query D. select知道视图咋建就应该知道这题咋写了.
张三需要在t2表上定义一个外关键字,这个外关键字参考与t1表,下面说法正确的是: (我猜是 D)
A.张三需要有t2表上的select权
B.张三需要有t1表上的select权
C.张三需要有t2表上的references权
D.张三需要有t1表上的references权
在使用JDBC编写的数据库应用中下面说法错误的是: D
A.可以定义事务的隔离级
B.可以指定事务能否自动提交
C.可以调用数据库定义的存储过程
D.不能查询数据库中已有的表的名称B?
关于第三范式描述正确的是 D
A.如果一个关系属于第三范式那么它没有数据冗余
B.一个关系模式不存在非主属性部分依赖,它就是属于第三范式
C.一个关系模式不存在非主属性传递依赖,它就是属于第三范式
D.一个关系模式属于 BC 范式,它就属于第三范式下面视图定义是中哪个是可更新视图: D
- A.Create view V1 as select S.rating , avg(S.age) as avgage from Sailors S
group by
S.rating () - B.Create view V2 as select
*
from saliros S1 where S.age > 18union
select*
from sailors S2 where S2.name like ‘%Tom’ - C.Create view V3 as select S.name, R.bid from Sailor R, Reserves R where S.sid=R.sid (有两个属性)
- D.Create view V4 as select * from Boats B where B.bname like ‘%Happ%’(where子句不能用关系B)
在数据库启动过程中恢复系统执行顺序是: (C)
A.分析阶段,取消阶段,重做阶段
B.取消阶段,分析阶段,重做阶段
C.分析阶段,重做阶段,取消阶段
D.取消阶段,重做阶段,分析阶段.分析,redo,undo
一个企业有大量的数据需要存储在数据库中,由于某些原因要求存储的数据条带化分布,有冗余但冗余不能使用算法冗余.下面磁盘技术中采用哪种方法可以满足该要求: (D??)
A. RAID 0 B.RAID 1
C. RAID 0+1 D.RAID 5在一个隔离级为读提交数据的事物中执行select * from sailors where 1=1查询,对该语句执行时在数据库中获得的锁下面哪个描述是最准确的? (D??)
A.获得sailors表的S锁,记录上不加锁。
B.获得sailors表的IS锁及记录上的IS锁
C.获得sailors表的S锁及记录上的IS锁
D.获得sailors表的IS锁及记录上的S锁数据库语言包括 DDL,DML 和DCL,下面哪个语句是 DML 语句: (D)
A.Create index
B.Drop table
C.Alter table
D.Update有关系模式R(A,B,C)和三个合法实例(4,2,3),(4,2,3),(5,3,3),下面哪个函数依赖在关系模式R 上不成立 D
A.A->B B. BC->A C. B->C D. C->A有关系模式R(A,B,C,D),其函数依赖集F={A->B,B->C,C->D,D->A},将R分解为AD,AB,BC请问该分解丢失了下面哪个函数依赖: C
A.A->C B.B->D C.C->D D.没有丢失函数依赖有关系模式R(A,B,C,D,E,F),其函数依赖集F={A->B,B->C,C->A, D->E},在该关系模式上有几个关键字:C
A.1 B. 2 C.3 D.4L:D
R:
LR:ABC
N: F
DFA
DFB
DFC有关系模式 R(A,B,C,D,E),R 的函数依赖集 F={A-> B,BC->E,ED->A},下面哪个说法是正确的: B
A.R 是BCNF B.R 是 3NF
C.分解(ACD,BCE)是无损分解 D.分解(ABD,CDE)是无损分解ACD
BCD
EDC有关系模式 R(A,B,C,D)下面哪个函数依赖集使得 R 是 BCNF (D)
A. F={C->D,C->A,B->C} B. F={ABC->D,D->A}
C. F={B->C,D->A} D. F={AB->C,C->D,C->AB}在遵循严格2PL锁(两阶段锁)的规则的情况下,下面哪个调度会出现死锁: (B)
A.T1:R(X),T2:W(X),T2:W(Y),T3:W(Y),T1:W(Y)
B T1:R(X),T2:W(Y),T2:W(X),T3:W(Y),T1:W(Y),
C T1:R(A),T2:W(B),T1:R(A),T3:R(C),T2:W(C),T4:W(A)
D.T1:R(A),T2:W(B),T3:W(C),T1: Commit,T2:W(A), T2:Commit,T3:W(B), T3:Commit下面关于数据库事务处理描述正确的是: C
A.原子性和一致性是由数据库的并发调度保证的.
B.隔离性和持久性是由数据库的并发调度保证的.
C.原子性和持久性是由数据库的恢复系统保证的
D.一致性和隔离性是由数据库的恢复系统保证的感觉隔离性和一致性保证并发调度
二.简单题(50 分)
在 mysql 中有 club 数据库,该数据库中有三个表分别是:
- Sailors(sid char(10),sname char(20),rating int,age int,gender char(2)),其中 sid 是主关键字,sid 表示水手的编号,sname 表示水手的姓名,rating 表示水手的级别,age 表示水手的年龄,gender 表示水手的性别。
- Boats(bid char(10),bname char(20),color char(10),),其中 bid 表示船的编号是主关键字,bname 是船的名字,color 是船的颜色。
- Reserves(sid char(10),bid char(10),rdate date),Reserves 中记录水手在哪天订了那只船,其中 sid 是指向 Sailors 的外关字, bid 是指向 Boats 的外关键字,(sid,bid,rdate)合起来构成 Reserves 的主关键字。
用关系代数写出下面的查询
- 查找只订过一艘红色船而没有订过其它颜色船的水手编号(该水手只订过一次船而且船的颜色是红色.)
1)Boats 和 Reserves 做自然连接
找出 谁定了什么颜色的船 R1
2)Sailors 和 R1 做笛卡尔积
然后从中选出sid = sid2 and color = ‘red’ and color <> color2 R2
然后 Sailors 的 sid 减去 R2 的sid 即要查询的结果
用元组关系验算写出下面的查询
- 查找既订过红色船又订过绿色船水手的姓名和编号
1)Boats 和 Reserves 做自然连接 bid,sid,color R1
2) R2是 R1重命名
3)R1×R2 后 color1=’red’,color2=’green’ sid1=sid2, R3
4)R3 和 Sailors 自然连接 R3.sid=S.sid 取出 s.sname和s.sid
用 SQL 语言写出下面的查询
3. 查找定了所有船的水手的编号和姓名
1 | select s.sid,s.name |
- 查找订过红色船也订过绿色船水手的编号和姓名
1
2
3
4
5Select s.sname from sailors s,reserves r,boats b
Where s.sid=r.sid and r.bid=b.bid and b.color=’red’
intersect
Select s.sname from sailors s,reserves r,boats b
Where s.sid=r.sid and r.bid=b.bid and b.color=’green’
- students(sid: char(10),sname: char(20) , class:int),Students 为软件学院 2015 级学生信息表,sid 表示学生的学号,sname 为学生的姓名,class 为学生的班级,sid 为主关键字。
- course(cid:char(7),cname:string,teacher:string), Course 为软件学院 2015 级学生在2016-2017 学期可选课程信息表,cid 表示课程号,cname 表示课程名,teacher 表示教师,cid 是主关键字。
- enrolled(sid:char(10),cid:char(7),grade:integer),Enrolled 为学生的选课信息表,sid 表示学号, cid 表示课程号, grade 表示成绩。
用 SQL 语言写出下面的查询
- 统计各班学生的数据库原理的最高分。
1
2
3
4
5
6
select max(e.grade)
from students s,course c,enrolled e
where c.cid=e.cid and cname= '数据库原理' and
s.sid = e.sid
group by s.class
- 查找数据库原理课程平均分最高的班级中数据库原理课程的最低分。
创建一个视图??
1 | select min(grade) |
有关系模式 R(A,B,C,D,E,F,G,H,I),它的函数依赖集
F={AB->CD,A->E,B->FH,C->G,D->B,G->C,H->I}
7. 求解它的函数依赖集最小集
第一步: 拆右边
AB->C,AB->D,A->E,B->F,B->H,C->G,D->B,G->C,H->I
第二步: 拆左边?
第三步:算闭包?
去掉 AB->C 算 AB+: ABDEFHI 不能推出AB->C 保留
去掉 AB->D 算 AB+: ABCEFHGI 不能推出 AB->D 保留
去掉 A->E 算 A+ = AE
去掉 B->F 算 B+ =BHI
去掉 B->H 算 B+= BF
去掉 C->G 算 C+= CG
去掉 D->B 算 D+ = D
去掉 G->C 算 G+ = G
去掉 H->I 算 H+ = H 都保留
所以这就是 函数依赖集最小集是 (AB->C,AB->D,A->E,B->F,B->H,C->G,D->B,G->C,H->I)
- 将其分解为三范式,该分解要具有无损连接性和依赖保持性.
第一步:求最小依赖集 (AB->C,AB->D,A->E,B->F,B->H,C->G,D->B,G->C,H->I)
第二步:把每个依赖属性分解成一个关系
即(ABC),(ABD),(AE),(BF),(BH),(CG),(DB),(GC),(HI)
去掉(GC)
为: (ABC),(ABD),(AE),(BF),(BH),(CG),(DB),(HI)
L: A
R: E F I
LR:B C D G H
N:
第三步: 找关键字
A+ = AE
AB+ = ABCDEFGHI
AB在属性集内,所以三范式最后分解为 (ABC),(ABD),(AE),(BF),(BH),(CG),(DB),(HI)
- 根据函数依赖公理即 Armstrong 公理,证明下面的定理 有关系模式 R,X,Y,W 是 R 的属性子集,如果 X->Y,YW->Z 成立,则 XW->Z 也成立。
根据函数依赖的定义:因为X->Y,YW->Z成立,
所以对于关系模式R的任意一个实例中的两个元组
t1,t2.如果t1.X=t2.X那么t1.Y=t2.Y. 如果t1.Y=t2.Y.,t1.W=t2.W 那么t1.Z=t2.Z
所以 当 t1.X=t2.X,t1.w=t2.w,
则 t1.Z=t2.Z
所以 XW->Z
- 请详细描述数据库在启动时它的恢复算法
不考
2006-2007
选择题
- 关于数据库管理系统下面哪个描述是最正确的 C
A.数据库管理系统是数据的集合.
B.数据库管理系统是数据的集合,并且存储着数据与数据之间的关系.
C.数据库管理系统是由一个互相关联的数据的集合和一组用以访问这些数据的程序组成.
D.数据库管理系统是由数据的集合和一组用以访问这些数据的程序组成
下面那项不是数据库管理系统组成部分: D
A. 事务管理器 B.查询处理器.
C. 存储管理器 D.进程控制器.如果有两个关系T1,T2.客户要求每当给T2删除一条记录时,T1中特定记录就需要被改变,我们需要定义什么来满足该要求. D
A.在T1上定义视图 B.在T2上定义视图
C.在T1和T2上定义约束 D.定义trigger关于数据库事务描述不正确的是 A
A. 一个事务中的所有对数据库的改变可以部分完成和部分不完成.
B. 一个事务中的所有对数据库的改变必须全部完成或全部不完成.
C. 数据库的事务是不可以再次划分的.
D. 如果事务在完成前被中断,数据库管理系统能把那些由未完成事务所产生的数据变化从数据库中恢复
5. 某个企业的数据库包含以下信息:员工(由员工编号唯一确定,记为ssn),部门(由部门编号唯一确定记为did)员工工作在部门中,每个部门最多有一个管理者.下面哪个ER图能够正确的反映管理关系. B
- 关于视图的描述下面说法哪些是正确的: D
A. 数据库即存储视图的定义也存视图的数据.
B. 用带有聚集运算的SQL创建的视图是可更新视图 ×
C. 用带有group by字句的SQL创建的视图是可更新视图 ×
D. 视图可以能在多个关系上创建
某个企业的数据库包含以下信息.员工(由员工编号唯一确定,记为ssn),员工的子女
(属性为name,age),在双亲给定的情况下,每个孩子能由他的姓名唯一确定(假设他们的双亲中只有一个是公司的员工).一旦员工离开公司,那么企业不再对其子女信息感兴趣.下面哪个ER图能够正确的反映以上需求 B
如果将下面的ER图转换成数据库中的关系,那么在数据库中需要定义. D
A. 2个关系 B. 3个关系
C. 3个关系 ,1个断言 D. 2个关系,1个断言如果将下面的ER图转换成数据库中的关系(该ER图中要求员工的年龄在18到55岁之间),那么在数据库中至少需要定义. B
A. 3个关系,1个断言 B.2个关系,1个约束
C.3个关系 D.2个关系
我们在一个关系中 B
A.必须定义一个主关键字 (可以没有) B.只能创建一个聚集索引(cluster index)
C.只能创建一个稠密索引 ?? D.只能定义一个约束.(约束可以有很多)在DBMS的关系中 B
A.关键字属性值可以为空 B.外关键字属性值可以为空
C.任何属性值都可以为空 D.任何属性值都不可以为空.关键字属性值不能为空,外关键字属性值可以为空
下面关于外关键字描述不正确的是 C
A.外关键字必须是所参考表的主关键字.
B.外关键字属性必须与参考的属性是相同的数据类型
C.定义外关键字需要对所参考表拥有select权
D.一个表中可以有多个外关键字.
我们在DBMS中记录数据库员工和员工工作信息,要求当某个员工离职后,数据库需要自动删除该员工的工作信息,在定义工作表时我们对于外关键字的删除规则应定义为 B
A. ON DELETE ROLLBACK B. ON DELETE CASCADE
C.ON DELETE SET NULL D.ON DELETE NO ACTION在DBMS中执行GRANT update(col1) ON TABLE t.t1 TO user7,对于该语句下面哪个描述是正确的: B
A.user7可以在t1上定义视图
B.user7可以更新t1中的col1属性的值
C.user7在创建其他表时可以定义参考于t1中col1属性的外关键字
D.user7可以在t1中定义外关键字.
15. 关系模式R,R的属性集是{ABCDEG}有函数依赖集F={AB->C , C->A, BE->C, BC->D , CG->BD}计算(AB)的属性闭包.D
A. BDEG B. BDC C. ABCDEG D. ABCD
- staff的定义如下 C
id INTEGER
name CHAR(20)
dept INTEGER
job CHAR(20)
years INTEGER
salary DECIMAL(10,2)
comm DECIMAL(10,2)
下面哪个语句可以按照job和salary的升序排序来返回所有员工的信息.
A. SELECT id,name,salary,dept,job,years,comm FROM staff ORDER BY 4,6
B. SELECT id,name,salary,dept,job,years,comm FROM staff GROUP BY 4,6
C. SELECT id,name,salary,dept,job,years,comm FROM staff ORDER BY 5,3
D. SELECT id,name,salary,dept,job,years,comm FROM staff GROUP BY 5,3
关系模式Sailors(sid,lastname,firtname,age,ratring)其中lastname允许为空. 下面哪个语句能够查找出lastname属性值不为空的水手信息. C
A. SELECT * FROM SAILORS WHERE LASTNAME<>’NULL’
B. SELECT * FROM SAILORS WHERE LASTNAME<>NULL
C. SELECT * FROM SAILORS WHERE LASTNAME IS not NULL
D. SELECT * FROM SAILORS WHERE LASTNAME not LIKE ’NULL’关系模式Sailors(sid,sname,age,ratring)下面哪个语句能够查找出sname属性值至少为四个字符长,并且开始和结束字符都是B的水手信息. B
A.SELECT * FROM SAILORS WHERE sname like ’B%%_B’
B.SELECT * FROM SAILORS WHERE sname like’B__%B’
C. SELECT * FROM SAILORS WHERE sname like ’B??B’
D. SELECT * FROM SAILORS WHERE sname like’B*?B’
有关系模式R(A,B,C,D,E),R的函数依赖集F={A->BC,CB->E,B->D,E->A}下面哪个分解具有无损连接性. B
A. (A,D,C),(A,B,C) B. (A,B,C),(B,C,D,E)
C. (A,B,D),(C,D,E) D. (B,C,D),(A,D,E)有关系模式R(A,B,C)和三个合法实例(6,4,6),(6,4,6),(7,4,8),下面哪个函数依赖在关系模式R上不成立 C
A. A->B B. BC->A C. B->C D. C->A.设有关系模式R(B,I,S,Q,D),其上函数依赖集F={S->D,I->B,IS->Q,B->Q,B->I}下面那些是R的关键字. A
A.IS B.IB C.IQ D.ISB
求闭包
IS+ = ISDBQ
下面哪个改变可以通过alter table实现 D
A. 增加一个触发. B. 增加一个索引.
C. 增加一调记录 D. 定义一个候选关键字下面的语句按顺序成功执行后
- CREATE TABLE tab1 (c1 CHAR(1))
- INSERT INTO tab1 VALUES (‘b’)
- CREATE VIEW view1 AS SELECT c1 FROM tab1 WHERE c1 =’a’
- INSERT INTO view1 VALUES (‘a’)
- INSERT INTO tab1 VALUES (‘b’)
执行SELECT c1 FROM tab1可以选择出多少条记录 D
A.0 B.1 C.2 D.3OK
- 有一个关系模式employee(name,department,phone_number),下面哪句话允许user1可以修改phone_number列的值 C
A. GRANT MODIFY (phone_number) ON TABLE employee TO user1
B. GRANT ALTER (phone_number) ON TABLE employee TO user1
C. GRANT UPDATE (phone_number) ON TABLE employee TO user1
D. GRANT REFERENCES (phone_number) ON TABLE employee TO user1
- 数据库中SAILORS表是由joe创建的.在DBMS完成下面的语句后 D
- Grant select on Sailors To Art With Grant option—Joe执行
- Grant select,update on Sailors To Bob With Grant option—Joe执行
- Grant select on Sailors To Bob With Grant option—Art执行
- Revoke select on Sailors From Art Cascade—Joe执行
Bob对Sailors表拥有
A. select权 B. Update权 C.没有任何权利 D.select和Update权
在使用数据库中使用索引的目的是: B ? ?
A.提高数据文件的存储率. B.可以更加有效的控制事务处理中的幻影问题.
C.增加DBMS的安全性. D.提高增加记录的效率.提高查询速度
下面哪种文件格式对不等值搜索的效率最高 B
A.无序文件 B.排序文件 C.哈希文件 D.队列文件下面关于主关键字描述不正确的是: D
A.在表中可以通过主关键字唯一的确定一条记录.
B.主关键字可以由多个属性组成.
C.组成主关键字的属性值不能空.
D.一个表中可以有多个主关键字
- 关于第三范式描述正确的是 B
A.一个关系属于第第一范式,它就属于第三范式
B. 一个关系模式属于BC范式,它就属于第三范式
C. 一个关系实例有数据冗余,它就是属于第三范式
D.一个关系实例没有数据冗余,它就是属于第三范式
- 下面哪个调度是串行调度: B
A. T1:R(A),T2:R(B),T2:W(B),T1:W(A)
B. T1:R(B),T1:W(B),T2:R(A), T2:W(A)
C. T1:R(A),T2:R(B),.T1:W(A),T2:W(B)
D. T2:R(A),T1:R(B),.T1:W(A),T2:W(B)
- 下面关于数据库事务处理描述错误的是: C
A.原子性:表示的是事务的所有操作在数据库中要么全部正确反映出来要么全部不反映.
B.一致性:事务在执行前如果数据库是一致性的那么执行后也是一致性的.
C.隔离性:事务在执行过程中可以感觉到系统中其他事务的执行
D. 持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使是系统出现故障时也如此.
- 下面关于数据库事务处理描述正确的是: C
A.原子性和一致性是由数据库的并发控制保证的.
B.隔离性和持久性是由数据库的并发控制保证的.
C.原子性和持久性是由数据库的恢复系统保证的
D.一致性和隔离性是由数据库的恢复系统保证的
- 数据库系统的log中检查点的作用是: D
A.系统事务取消时数据库关系系统需要重检查点开始取消.
B.系统事务正确完成时数据库系统会在log中设置检查点.
C.数据库重新启动时恢复系统中的重做阶段从检查点开始.
D.数据库重新启动时恢复系统中的分析阶段从检查点开始
- 下面哪个说法符合数据库系统WAL(log先写协议): D
A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
C.事务成功完成时不需要将与其相关的log页面强制写回磁盘
D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘
- 一个企业提供了一个查询数据库,该数据库的数据可以很容易的重新构造.为了提供数据库中磁盘数据的访问速度,下面磁盘技术中采用哪种方法可以满足该要求: A
A. RAID 0 B.RAID 1 C. RAID 0+1 D.RAID 5
一个企业有大量的数据需要存储在数据库中,企业要求数据的稳定性存储和数据开速访问,但不想使用太多的磁盘进行冗余存储,下面磁盘技术中采用哪种方法可以满足该要求: D
A. RAID 0 B.RAID 1 C. RAID 0+1 D.RAID 5在JDBC提供的数据库编程方法中提供了几种JDBC和数据库的连接方法: C
A.5 B.2 C.4 D.1
A.在死锁预防中,等待–死亡法是中止优先级高的事务 (终止优先级低的)
B.在死锁预防中,受伤–等待法是优先级高的事务可能等待优先级低的事务释放锁
C.使用死锁预防的系统中不会出现死锁。
D.使用死锁判断的系统会不会出现死锁。???
- 下面那个说法正确的是 B
A. 在嵌入式SQL编程中所有的查询都必须使用游标。
B. 如果内存中的某一页的pin_count=0,dirty=true,则该页在替换时该页的数据必须写会磁盘。
C. Create table tab1( a int, b int ,c int ,primary key (a,b)) create table tab2(a int , c int, d int, foreign key(a) reference tabl(a))语句可以在DBMS中执行成功 //因为a不是主键
D. 如果关系模式R的每一个函数依赖XA都使得下面两个条件中的一个成立则该关系模式满足BC范式。条件:1.XA是平凡函数依赖 2.X是一个关键字
- 数据库系统管理员按照事务的方式执行下面的语句:C
- Create table tab1 (a int,b int)
- insert into tabl values(1,2)
- insert into tab1 values(2,3)
- commit
- Insert into tab1 values(2,3)
- Insert into tab1 values(1,6)
- Commit
- Delete from tab1 where a=1
- Insert into tab1 values(1,7)
- Delete from tab1 where a=1
- Insert into tab1 values(1,8)
数据库系统突然崩溃,系统重新启动后,该管理员执行
Select count() from tab1
数据库系统的输出是多少:
A. 6 B.3 *C.4** D.5
???
- 下面关于索引说法正确的是: A
A. 聚集索引必然是稠密索引
B. 在数据库中只能创建一个稀松索引?
C. 在数据库中只能创建一个聚集索引
D. 索引文件中一定不包括记录的详细数据
- 有关系模式R(A,B,C,D,E),R的函数依赖集F={A->B,BC->E,ED->A},下面哪个说法是正确的: B
A.R是BCNF B.R是3NF
C.分解(ACD,BCE)是无损分解 D.分解(ABD,CDE)是无损分解
用眼看!
例子 - 有关系模式R(A,B,C,D)下面哪个函数依赖集使得R索引不是BCNF BC
A. F={AB->CD,C->ABD } B. F={ABC->D,D->A}
C. F={B->C,D->A} D. F={AB->C,C->D,C->AB}
BCNF是左边必须是超键,3NF是左边是超键或者右边是主属性
44.下面关于数据库事务并发调度正确的是 BD
A. 冲突可串行化调度一定是观测可串行化调度
B. 冲突可串行化调度一定与某种串行调度的结果一样.
C. 观测可串行化调度调度可以通过画图来判断
D. 冲突可串行化调度可以通过画图来判断
45.有两个关系TAB1,TAB2
TAB1 | TAB2
C1 C2 | CX CY
— —- | —– —-
A 11 | A 21
B 12 | C 22
C 13 |
结果集如下
C1 C2 | CX CY
—- —- | —- —-
A 11 | A 21
C 13 | C 22
哪个SQL语句能够生成该结果 AB
A. SELECT * FROM tab1 right OUTER JOIN tab2 ON c1=cx
B. SELECT * FROM tab1 INNER JOIN tab2 ON c1=cx
C. SELECT * FROM tab1 FULL OUTER JOIN tab2 ON c1=cx
D. SELECT * FROM tab1 LEFT OUTER JOIN tab2 ON c1=cx
46下面视图定义是中哪个是可更新视图 D
A.Create view V1 as select S.rating , max(S.age) as avgage from Sailors S group by S.rating
B.Create view V2 as select * from saliros S1 where S.age>18 expect select * from sailors S2 where S2.name like ‘%Tom’
C.Create view V3 as select S.name, B.bname from Sailor, Boats where S.sid=B.sid
D.Create view V4 as select * from Bailors B where B.name is not null
47 下面哪个SQL正确表示查找红色船被订船情况. CD
A.Select * from Reserves R,Boat B where R.bid=B.bid and b.color=’red’
B.Select * from Reserves R, inner join Boats B on R.bid=B.bid where b.color=’red’
C.Select * from Reserves R, right outer join Boats B on R.bid=B.bid and b.color=’red’
D.Select * from Reserves R, full outer join Boats B on R.bid=B.bid and S.age>17
- 下面说法正确的是: CD
A.在任何情况下严格的2PL锁能够保证调度的可串行化.
B.在一个表作查询时需要先给符合条件的查询上记录加上S锁然后给表加上IS锁.
C.在一个表作查询时需要先给表加上IS锁然后给符合条件的查询上记录加上S锁
D.在一个表上同时可以加上IS锁和IX锁
- 下面哪个调度会出现死锁: A
A.T1:R(X),T2:W(X),T2:W(Y),T3:W(Y),T1:W(Y),T1:Commit, T2:Commit, T3:Commit
B T1:R(X),T2:W(Y),T2:W(X),T3:W(Y),T1:W(Y), T1:Commit, T2:Commit, T3:Commit
C T1:R(A),T2:W(B),T1:R(A),T3:R(C),T2:W(C),T4:W(A),T3:W(B)
D.T1:R(A),T2:W(B),T3:W(C),T1: Commit,T2:W(A), T2:Commit,T3:W(B), T3:Commit
卧槽真难
我就感觉 D 没有死锁
- 下面哪个调度是冲突可串行的调度 ABD
A. T1:R(X),T1:R(Y),T1:W(X),T2:R(Y),T3:W(Y),T1:W(X),T2:R(Y)
B. T1:R(X),T2:R(Y),T3:W(X),T2(R(X),T1:R(X)
C. T1:R(X),T2:R(X),T1:W(X),T2:W(X)
D. T1:W(X),T2:R(Y),T1:R(Y),T2:R(X)A可以吗?
B可以?
C不可以我知道
D可以我也知道
解答题
1 | 有关系有关系模式 |
1 | 2.查找水手中年龄最大的水手编号。 |
1 | 3.查找所有水手的定船信息,并将结果按水手编号和船的编号排序(水手编号相同再排船的编号)。(5分) |
1 | 有关系模式 employee(ssn:string,name:string,city:string) |
1 | 找出至少两种/三种.... group by havaing count() >=2(3/4); |
1 | select s.sid,s.name |
- 将水手的级别分为初级,中级,高级,其中初级表示为 rating <=3,中级表示为 rating >3 and rating <=9,高级表示为 rating>10.统计这三个级别(初,中,高)中水手的人数。
1
2
3
4
5
6
7
select * from (count(*) from sailors where rating <=3) chuji
cross join
(count(*) from sailors where rating >3 and rating<=9) zhongji
cross join
(count(*) from sailors where rating>9) gaoji
)
- 统计每个水手订船的次数,并按订船次数降序排序
1
2
3
4
5
select sname, count(*) num
from sailors natural join reserves
group by sid
order by num desc - 在 club 数据库中定义一个合适的对象,能够实现下面的功能
当使用 insert 语句对 sailors 表插入记录时如果某些记录的 age 值小于 19,同时将这些 age 小于 19 的记录插入到 yangsaliors 表中。
1 | create trigger ST |
查找选修了全部课程的学生的学号、姓名 (两种语法 )
工资大于某个数值的 员工的ID以及最高的工资 并按照员工的序号进行排序
某一列进行重命名,给最高的工资重命名 要求这一列都是最高的工资
关系代数 5分
查找至少选择了两门、三门课程的学生
关系代数表示约束 主键外键 用两种方式来表的
两个学生的学号是一样的 =空集 属于
规范化理论 8分
问答题24分
1.授权图 画图
2.给一个调度 有读写 什么叫有冲突的
两个事物对同一个事物的读与写
看一个调度是否是可串行化的 画一个优先图 没有环 然后给等价的串行调度
3.关于日志恢复的 日志记录 redo日志 undo日志
书上例子 根据这段日志 来恢复磁盘上的数据 以及恢复之后是什么样子的 书上的例题
4.数据库设计题 12分
给一个描述 如图书馆、购物网站的设计图 主键必须写下划线。
冲突是指 不同的事务对同一数据的读写操作和写写操作**