0%

DataBase

数据库复习

还几天考数据库了,看了看往年试卷没找几道会的题.
翻了翻书复习,内容太多了
所以打算拿往年试卷复习.

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图转换成表
  • 虚拟试图
    • 虚拟视图的创建
    • 可更新视图判断(说明原因)

    • 权限图
      • **:具有该数据元素所有权,而不是来自别处授予
      • *:带有授权选项
      • grant语句 与 权限图 的转换
    • 关键字和外键的写法及权限
  • 故障恢复与并行控制
    • 冲突可串行化的判断
    • ACID 事务的基本特点
    • undo/redo log
    • 死锁的判断 (依赖图,是否有环)
  • flush 数据库清理日志
    • flush执行一系列 sql 语句,但不提交事务;
      commit 方法先调用flush()方法,然后提交事务,提交事务意味着对数据库操作永久保存下来.
  • 两个关系R与S R与S的交集能写成什么?

    R∩S=R-(R-S)

  • 笛卡尔积用基本的关系代数表述

    rlj

  1. 下列关于关系数据库的说法,哪一项是正确的?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. 数据库管理系统的组成部分:

  • 锁管理器
  • 存储管理器
  • 文件/索引/记录管理器
  • 事务管理器
  • 查询编译器
  • 缓冲区管理器
  1. on update 和 on delete 后面可以跟的词语有四个no action , set null , set default ,cascade
  • no action 表示 不做任何操作,
  • set null 表示在外键表中将相应字段设置为null
  • set default 表示设置为默认值
  • cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除
  1. 有关系模式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

  2. 下面哪个说法符合数据库系统WAL(log先写协议): D
    A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
    B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
    C.事务成功完成时不需要将与其相关的log页面强制写回磁盘
    D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘

  3. 在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中定义外关键字.

  4. 下列哪一个说法是不正确的 (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.数据库重新启动时恢复系统中的分析阶段从检查点开始

  1. 创建视图
    create view movieprod(t,n) as select title,name
    from movies,movieexexc
    where pc#=c#
  2. 创建约束
    club 数据库中定义一个合适的对象,能够实现下面的功能
    当使用 insert 语句对 sailors 表插入记录时如果某些记录的 age 值小于 19,同时将这些 age 小于 19 的记录插入到 yangsaliors 表中。
    1
    2
    3
    4
    5
    6
    7
    create 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

  1. 下列哪一个选项中的描述都可以作为E/R图中的实体集? D
    A. 产品,颜色,高度
    B. 黄色,大,长
    C. 约翰,狗,飞机
    D. 人,动物,植物

实体是某种抽象对象,相似实体的集合形成实体集.
实体集有相关的属性,属性是这个实体机中实体所具有的性质
联系是两个或多个实体集的连接
颜色,高度 应该算是一种属性
约翰,狗,飞机 是实体

  1. 下列哪一项表述是错误的? D
    A.关键字唯一地标识表中的行。
    B.外关键字是引用其他表主关键字的列集。
    C.主关键字和外关键字用于强制数据完整性。
    D.必须始终在表中定义主关键字。

  2. 下列哪些实体集在ER图中应该使用一对多关系? D
    A. 人, 汽车
    B. 学生,课程
    C. 学生,教师
    D. 母亲,孩子

  3. 如果使用下列语句创建 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 这个是约束吗?

  4. 给定下列两个表

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

  1. 我们在DBMS中记录员工和部门的管理信息,当一个部门的管理员辞职后,数据库需要自动将该部门的管理员信息填成空值,在定义管理关系表时我们对于外关键字的删除规则应定义为 C
    A.ON DELETE CASCADE B.ON DELETE ROLLBACK
    C.ON DELETE SET NULL D.ON DELETE NO ACTION

  2. 执行下列 SQL 语句之后:
    GRANT ALL ON TABLE student TO USER user1
    假设用户 USER1 没有其他权限,下列哪一项操作是 USER1 可以执行的?D
    A. 将其获得在表student上的所有权限赋予其他用户
    B. 删除关联到表 STUDENT 的视图
    C. 删除表 STUDENT D. 以上都不是

  3. 下面视图定义是中哪个是可更新视图 我猜选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) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。
    可更新视图规则
  1. 有两个关系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

  1. 数据库系统管理员按照事务的方式执行下面的语句:
    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
  1. 有关系模式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.没有函数依赖丢失
  1. 有两个关系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关键字

  1. 假设关系模式R1(EMP_ID,EMP_NAME,PHONE,EMAIL,SALARY)
    下列方法中,哪一个是限制用户查看 SALARY 信息但仍允许他们查看其他值的最简单方法?B
    A. 加密表的数据
    B. 创建不包含 SALARY 列的视图。赋予访问视图的权限,并撤销访问原始表的权限
    C. 撤销不应查看 SALARY 数据的用户对 SALARY 列的 SELECT 访问权限
    D. 将 SALARY 数据存储在其他表中,并赋予相应用户对该表的 SELECT 权限

  2. 有关系模式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

    无损连接性就是能还原关系的意思

  3. 下面哪个说法符合数据库系统WAL(log先写协议): D
    A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
    B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
    C.事务成功完成时不需要将与其相关的log页面强制写回磁盘
    D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘

  4. 在JDBC提供的数据库编程方法中提供了几种JDBC和数据库的连接方法:C
    A.5 B.2 C.4 D.1

  5. 某数据库应用系统中,在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)上建立索引

  6. 下面哪个调度是串行调度: 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)

  7. 关于数据库管理系统下面哪个描述是最正确的 C
    A.数据库管理系统是数据的集合.
    B.数据库管理系统是数据的集合,并且存储着数据与数据之间的关系.
    C.数据库管理系统是由一个互相关联的数据的集合和一组用以访问和管理这些数据的程序组成.

  1. 以下哪种情况会发生不可重复读?A
    A. 一个事务读取了相同的数据记录两次,并且每次都返回不同的数据值
    B. 在一个事务期间,基于特定标准的搜索在执行连续搜索之后返回额外的行
    C. 返回了未落实的数据,但产生这些数据的事务已回滚
    D. 两个事务读取并试图更新相同的数据,第二次更新将在第一次更新落实之前将其覆盖
  2. 在数据库中存储的是 C
    A.数据 B.数据模型
    C.数据以及数据之间的联系 D.信息

二.名称解释(每题3分,共15分)

  1. 主关键字
    主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键或多字段主键。又称主码。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。

2.BC范式

BCNF
设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。

  1. 关系模式分解的无损连接性

对关系模式分解时,原关系模式的任何一个合法的关系值在分解之后应该能通过自然连接运算恢复起来,这就是无损连接所要解决的问题。

  1. 数据库

    数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据

  2. 事务原子性
    事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的任何操作都必须被撤销,让数据库返回初始状态。
    拓展:

  • 事务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

  1. 统计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

  1. 显示在2011级各班中在数据库原理课程上平均分最低的班级和平均分(5分)

select min()
avg(score) as avg(score)
group by class

  1. 统计选了数据库课程的平均分,最高分和最低分(5分)
    avg(score),max()
  1. 请根据下面的要求画出ER图(5分)
    某个企业的数据库中记录以下信息:1.员工(ssn,name,lot)员工编号ssn唯一确定一个员工,2.部门(did,dname,buget)部门编号did唯一确定一个部门,3.员工与部门的管理关系,每个部门有且仅有一个管理者。

一个员工实体集,ssn是主键 (矩形)
一个部门实体集,did是主键 (矩形)
一个 manage 关系, 剪头指向 部门 (菱形)
需不需要用弧线?

  1. 有关系模式R(ABCD),R上的函数依赖集F={ A->C,C->A,B->AC,D->AC,BD-.A },请将R分解成满足第三范式的关系模式,要求该分解具有无损连接性和依赖保持性(10分)

关系数据库设计理论

  • 关系的键 : 一个或多个属性集 {…}; 当键只包括单独的属性A时,称A(而不是{A})是键

      1. 不可能存在两个不同元组具有相同的{…}
      1. 键必须是最小的,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。

  • 传递函数依赖
    设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

      1. B中所有FD的右边均为单一属性
      1. 从B中删除任何一个FD后,该集合不再是基本集
      1. 对于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是模式)
      _表示可匹配一个字符
      %表示可匹配任何形式字符串
  • 输出排序
    在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;
        上述语句做了两件事:
        1. 第一行声明事务可以写数据
        2. 第二行声明事务用读未提交的”隔离层次”运行,即允许事务读脏数据
    • 其他隔离层次
      • 可串行化
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;默认的;
      • 读未提交(脏读)
      • 读提交
        SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
      • 可重复读
        SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

        事务其他相关

  • 共享锁和排他锁

  • 日志的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

  • 属性和元组上的约束

    1. 在单一属性上的约束
    2. 在整个元组上的约束
    • 非空值约束
    • 基于属性的CHECK约束
    • 基于元组的CHECK约束
  • 修改约束

    • 给约束命名
      在约束前加保留字CONSTRAINT和约束的名字
    • 修改表上的约束
  • 断言 :

    • 创建断言
      CREATE ASSERTION <断言名> CHECK (<条件>)

    • 使用断言

    • 删除断言
      DROP ASSERTION (<断言名>)

  • 触发器
    有事也称为 事件-条件-动作规则.或者ECA规则

    • SQL中的触发器
      • 主要特征 :
    • 触发器设计的选项

      视图与索引

  • 虚拟视图

    • 视图的定义:
      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)如果属性上存在索引,则为该属性指定一个值或者取值范围能极大地提高查询的执行效率.同样,如果查询涉及该属性上的连接操作,也能带来性能上的改善

    • 另一方面,为关系上的某个属性或者某个属性集建立的索引会使得对关系的插入,删除,和修改变得更复杂和更费时.

    • 简单代价模型

    • 一些有用的索引:

    1. 在查询中未主键指定值时比较普遍的,因此键上的索引通常会被频繁地使用
    2. 因为键值时唯一的,故与给定键值匹配的元组最多只有一个,因为索引返回的要么是这个元组的位置,要么什么也不返回.
      • 存在两种情况,即使不是建立在键属性上的索引页仍然有效
        几乎可以看成是键
        元组在该属性上是聚集的.
    • 计算最佳索引
    • 所以的自动选择
  • 物化视图(不考)

存储过程 :

  • 创建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 <用户列表>

    • CASCADE
    • RESTRICT\

      其他部分:

  • 数据库教父—-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.重做所有已提交的事务

  • 介质故障(硬故障,指外存故障)
    • 磁盘损坏
    • 磁头碰撞
    • 瞬时强磁场干扰
  • 介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务
  • 截至故障比前两类故障的可能性小得多,但破坏性大得多
  • 介质故障的恢复
    • 装入数据库发生介质故障前某个时刻的数据副本
    • 重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库
  1. 计算机病毒
  • 故障小结
    对各类故障,对数据库的影响有两种可能性:
    • 数据库本身被破坏
    • 数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的
  • 恢复操作的基本原理: 冗余
    利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据
  • 恢复的实现技术: 复杂

问: 系统故障会导致什么问题?

恢复的实现技术
  • 恢复机制涉及到的关键:

    • 如何建立冗余数据
      • 数据转储
      • 登陆日志文件
  • 数据转储

    • 转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程
    • 备用的数据成为后备副本或后援副本
    • 数据库遭到破坏后可以将后备副本重新装入
    • 重装后备副本只能将数据库恢复到转储时的状态
    • 要想恢复到故障发生时的状态,必须重新运行自转储后的所有更新事务
  • 转储方法

    • 静态转储
      • 系统中无运行事务时进行的转储操作
      • 转储期间不允许对数据库进行操作
      • 转储开始时数据库处于一致性状态
      • 得到的一定是一个数据一致性的副本

        优点:实现简单
        缺点:

1.降低了数据库的可用性
2.转储必须等待正运行的用户事务结束
3.新的事务必须等转储结束

  • 动态转储
    • 转储操作与用户并发进行
    • 转储期间允许对数据库进行存取或修改

      优点:

1.不用等待正在进行的事务结束
2.转储期间允许对数据库进行存取或修改
缺点:不能保证副本中的数据正确有效

  • 动态转储进行故障恢复
    需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件
    后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态

  • 海量转储
    每次转储全部数据库

  • 增量转储
    只转储上次转储后更新过的数据

海量转储与增量转储的比较

1.从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
2.如果数据库很大,事务处理又十分频繁,则增量转储更有效

  • 登陆日志文件
  • 1.日志文件
    记录事务对数据库的更新操作文件
  • 格式:
    • 以记录为单位的日志文件(事务标识,操作类型,操作对象,更新前数据的旧值,更新后数据的新值)
    • 以数据为单位的日志文件(事务标识,被更新的数据块)
  • 内容:
    • 各个事务的开始标记
    • 各个事务的结束标记
    • 各个事务所有的更新操作
  • 作用:
    • 进行事务故障恢复
    • 进行系统故障恢复
    • 协助后备副本进行介质故障恢复

2.利用静态转储副本和日志文件进行恢复

对上图进行说明:

  1. 系统在Ta时刻停止运行事务,进行数据库转储
  2. 在Tb时刻转储完毕,得到Tb时刻的数据库一致性副本
  3. 系统运行到Tf时刻发生故障
  4. 为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复到Tb时刻的状态
  5. 重新运行自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介入)

  1. 重装数据库
  2. 装入有关的日志文件副本,重做已完成的事务
具有检查点的回复技术
  • 解决问题
    • 搜索整个日志将耗费大量的时间
    • 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 分)

  1. 以下哪个选项是对脏读的描述?C
    A.一个事务先后执行多次相同条件的查询,并且每次返回的数据都不相同。(不可重复读)
    B.在一个事务期间,基于特定标准的搜索在执行连续搜索之后返回额外的行(幻影??)
    C.一个事务读了另外一个事务修改还未提交的数据.(脏读)
    D.两个事务读取并试图更新相同的数据,第二次更新将在第一次更新落实之前将其覆盖

  2. C

  3. 如果使用下列语句创建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’)

  4. 数据库管理员需要在T1表中定义一个外关键字参考与T2表,下面描述正确是:C
    A.在T1中外关键字属性可以是T2表的某个关键字属性的真子集。
    B.在T1中外关键字属性名称必须与T2表的某个关键字属性名称相同。
    C.在T1中外关键字属性的数据类型必须与T2表的某个关键字属性的数据完全相同(包括字符串的长度也要相同)
    D.在T1中外关键字属性不能为空。(可以为空)

  5. 有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

  1. 下面哪个SQL语句可以引起触发器运行? C
    A. DROP B. ALTER
    C. DELETE D. ROLLBACK

    update,delete,insert三种触发器

create trigger st
after update on <表名>
referencing
new row as newrow
for each row
when()

  1. 下面关于索引说法正确的是? B
    A.索引可以提高insert语句的执行速度。
    B.索引可以提高某些select语句的执行速度。
    C.索引可以提高所有select语句的执行速度。
    D.索引属性值不能为空。

  2. 张三需要在t1表上创建一个视图,在t1表上他最少需要什么权限: D
    A. insert B. delete
    C. query D. select

    知道视图咋建就应该知道这题咋写了.

  3. 张三需要在t2表上定义一个外关键字,这个外关键字参考与t1表,下面说法正确的是: (我猜是 D)
    A.张三需要有t2表上的select权
    B.张三需要有t1表上的select权
    C.张三需要有t2表上的references权
    D.张三需要有t1表上的references权

  1. 在使用JDBC编写的数据库应用中下面说法错误的是: D
    A.可以定义事务的隔离级
    B.可以指定事务能否自动提交
    C.可以调用数据库定义的存储过程
    D.不能查询数据库中已有的表的名称

  2. B?

  3. 关于第三范式描述正确的是 D
    A.如果一个关系属于第三范式那么它没有数据冗余
    B.一个关系模式不存在非主属性部分依赖,它就是属于第三范式
    C.一个关系模式不存在非主属性传递依赖,它就是属于第三范式
    D.一个关系模式属于 BC 范式,它就属于第三范式

  4. 下面视图定义是中哪个是可更新视图: 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 > 18 union 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)
  1. 在数据库启动过程中恢复系统执行顺序是: (C)
    A.分析阶段,取消阶段,重做阶段
    B.取消阶段,分析阶段,重做阶段
    C.分析阶段,重做阶段,取消阶段
    D.取消阶段,重做阶段,分析阶段.

    分析,redo,undo

  2. 一个企业有大量的数据需要存储在数据库中,由于某些原因要求存储的数据条带化分布,有冗余但冗余不能使用算法冗余.下面磁盘技术中采用哪种方法可以满足该要求: (D??)
    A. RAID 0 B.RAID 1
    C. RAID 0+1 D.RAID 5

  3. 在一个隔离级为读提交数据的事物中执行select * from sailors where 1=1查询,对该语句执行时在数据库中获得的锁下面哪个描述是最准确的? (D??)
    A.获得sailors表的S锁,记录上不加锁。
    B.获得sailors表的IS锁及记录上的IS锁
    C.获得sailors表的S锁及记录上的IS锁
    D.获得sailors表的IS锁及记录上的S锁

  4. 数据库语言包括 DDL,DML 和DCL,下面哪个语句是 DML 语句: (D)
    A.Create index
    B.Drop table
    C.Alter table
    D.Update

  5. 有关系模式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

  6. 有关系模式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.没有丢失函数依赖

  7. 有关系模式R(A,B,C,D,E,F),其函数依赖集F={A->B,B->C,C->A, D->E},在该关系模式上有几个关键字:C
    A.1 B. 2 C.3 D.4

    L:D
    R:
    LR:ABC
    N: F
    DFA
    DFB
    DFC

  8. 有关系模式 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

  9. 有关系模式 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}

  10. 在遵循严格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

  11. 下面关于数据库事务处理描述正确的是: 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. 查找只订过一艘红色船而没有订过其它颜色船的水手编号(该水手只订过一次船而且船的颜色是红色.)

1)Boats 和 Reserves 做自然连接
找出 谁定了什么颜色的船 R1
2)Sailors 和 R1 做笛卡尔积
然后从中选出sid = sid2 and color = ‘red’ and color <> color2 R2
然后 Sailors 的 sid 减去 R2 的sid 即要查询的结果

用元组关系验算写出下面的查询

  1. 查找既订过红色船又订过绿色船水手的姓名和编号

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
select s.sid,s.name
from saliors
where not exists (
select b.bid
from boats b
except
select r.bid
from reserves r
where r.sid=s.sid
)

select s.sid,s.sname
from sailors s
where not exist (
select b.bid
from boats b
where not exists (
select r.bid
from reserves r
where r.bid=b.bid
and r.sid=s.sid
)
)
这个人如果都定过就不存在有没订过的船
1)找这人没定过的船,
2)没找到 not exist 成立 选出这个人
  1. 查找订过红色船也订过绿色船水手的编号和姓名
    1
    2
    3
    4
    5
    Select 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. 统计各班学生的数据库原理的最高分。
    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. 查找数据库原理课程平均分最高的班级中数据库原理课程的最低分。
    创建一个视图??
1
2
3
4
5
select min(grade)
from enrolled natural join students natural join course
group by class
order by max(grade) desc
limit 1

有关系模式 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)

  1. 将其分解为三范式,该分解要具有无损连接性和依赖保持性.
    第一步:求最小依赖集 (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)
  1. 根据函数依赖公理即 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

  1. 请详细描述数据库在启动时它的恢复算法

不考

2006-2007

选择题

  1. 关于数据库管理系统下面哪个描述是最正确的 C
    A.数据库管理系统是数据的集合.
    B.数据库管理系统是数据的集合,并且存储着数据与数据之间的关系.

C.数据库管理系统是由一个互相关联的数据的集合和一组用以访问这些数据的程序组成.
D.数据库管理系统是由数据的集合和一组用以访问这些数据的程序组成

  1. 下面那项不是数据库管理系统组成部分: D
    A. 事务管理器 B.查询处理器.
    C. 存储管理器 D.进程控制器.

  2. 如果有两个关系T1,T2.客户要求每当给T2删除一条记录时,T1中特定记录就需要被改变,我们需要定义什么来满足该要求. D
    A.在T1上定义视图 B.在T2上定义视图
    C.在T1和T2上定义约束 D.定义trigger

  3. 关于数据库事务描述不正确的是 A

A. 一个事务中的所有对数据库的改变可以部分完成和部分不完成.
B. 一个事务中的所有对数据库的改变必须全部完成或全部不完成.
C. 数据库的事务是不可以再次划分的.
D. 如果事务在完成前被中断,数据库管理系统能把那些由未完成事务所产生的数据变化从数据库中恢复
5. 某个企业的数据库包含以下信息:员工(由员工编号唯一确定,记为ssn),部门(由部门编号唯一确定记为did)员工工作在部门中,每个部门最多有一个管理者.下面哪个ER图能够正确的反映管理关系. B

  1. 关于视图的描述下面说法哪些是正确的: D
    A. 数据库即存储视图的定义也存视图的数据.
    B. 用带有聚集运算的SQL创建的视图是可更新视图 ×
    C. 用带有group by字句的SQL创建的视图是可更新视图 ×

D. 视图可以能在多个关系上创建

  1. 某个企业的数据库包含以下信息.员工(由员工编号唯一确定,记为ssn),员工的子女
    (属性为name,age),在双亲给定的情况下,每个孩子能由他的姓名唯一确定(假设他们的双亲中只有一个是公司的员工).一旦员工离开公司,那么企业不再对其子女信息感兴趣.下面哪个ER图能够正确的反映以上需求 B

  2. 如果将下面的ER图转换成数据库中的关系,那么在数据库中需要定义. D

    A. 2个关系 B. 3个关系
    C. 3个关系 ,1个断言 D. 2个关系,1个断言

  3. 如果将下面的ER图转换成数据库中的关系(该ER图中要求员工的年龄在18到55岁之间),那么在数据库中至少需要定义. B

    A. 3个关系,1个断言 B.2个关系,1个约束
    C.3个关系 D.2个关系

  1. 我们在一个关系中 B
    A.必须定义一个主关键字 (可以没有) B.只能创建一个聚集索引(cluster index)
    C.只能创建一个稠密索引 ?? D.只能定义一个约束.(约束可以有很多)

  2. 在DBMS的关系中 B
    A.关键字属性值可以为空 B.外关键字属性值可以为空
    C.任何属性值都可以为空 D.任何属性值都不可以为空.

    关键字属性值不能为空,外关键字属性值可以为空

  3. 下面关于外关键字描述不正确的是 C
    A.外关键字必须是所参考表的主关键字.
    B.外关键字属性必须与参考的属性是相同的数据类型

C.定义外关键字需要对所参考表拥有select权
D.一个表中可以有多个外关键字.

  1. 我们在DBMS中记录数据库员工和员工工作信息,要求当某个员工离职后,数据库需要自动删除该员工的工作信息,在定义工作表时我们对于外关键字的删除规则应定义为 B
    A. ON DELETE ROLLBACK B. ON DELETE CASCADE
    C.ON DELETE SET NULL D.ON DELETE NO ACTION

  2. 在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

  1. 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

  1. 关系模式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’

  2. 关系模式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’

  1. 有关系模式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)

  2. 有关系模式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.

  3. 设有关系模式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

  1. 下面哪个改变可以通过alter table实现 D
    A. 增加一个触发. B. 增加一个索引.
    C. 增加一调记录 D. 定义一个候选关键字

  2. 下面的语句按顺序成功执行后

  • 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.3

    OK

  1. 有一个关系模式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

  1. 数据库中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权
  1. 在使用数据库中使用索引的目的是: B ? ?
    A.提高数据文件的存储率. B.可以更加有效的控制事务处理中的幻影问题.
    C.增加DBMS的安全性. D.提高增加记录的效率.

    提高查询速度

  2. 下面哪种文件格式对不等值搜索的效率最高 B
    A.无序文件 B.排序文件 C.哈希文件 D.队列文件

  3. 下面关于主关键字描述不正确的是: D
    A.在表中可以通过主关键字唯一的确定一条记录.
    B.主关键字可以由多个属性组成.
    C.组成主关键字的属性值不能空.

D.一个表中可以有多个主关键字

  1. 关于第三范式描述正确的是 B
    A.一个关系属于第第一范式,它就属于第三范式

B. 一个关系模式属于BC范式,它就属于第三范式
C. 一个关系实例有数据冗余,它就是属于第三范式
D.一个关系实例没有数据冗余,它就是属于第三范式

  1. 下面哪个调度是串行调度: 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)

  1. 下面关于数据库事务处理描述错误的是: C
    A.原子性:表示的是事务的所有操作在数据库中要么全部正确反映出来要么全部不反映.
    B.一致性:事务在执行前如果数据库是一致性的那么执行后也是一致性的.

C.隔离性:事务在执行过程中可以感觉到系统中其他事务的执行
D. 持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使是系统出现故障时也如此.

  1. 下面关于数据库事务处理描述正确的是: C
    A.原子性和一致性是由数据库的并发控制保证的.
    B.隔离性和持久性是由数据库的并发控制保证的.

C.原子性和持久性是由数据库的恢复系统保证的
D.一致性和隔离性是由数据库的恢复系统保证的

  1. 数据库系统的log中检查点的作用是: D
    A.系统事务取消时数据库关系系统需要重检查点开始取消.
    B.系统事务正确完成时数据库系统会在log中设置检查点.
    C.数据库重新启动时恢复系统中的重做阶段从检查点开始.

D.数据库重新启动时恢复系统中的分析阶段从检查点开始

  1. 下面哪个说法符合数据库系统WAL(log先写协议): D
    A.数据库内存中被事务修改的页面在事务成功完成时被强制写到磁盘中
    B.数据库内存中被事务修改的页面在事务撤销时被写到标记为非脏页
    C.事务成功完成时不需要将与其相关的log页面强制写回磁盘

D.事务中被修改的内存数据页面在写回磁盘前必须将与其相关的log写回磁盘

  1. 一个企业提供了一个查询数据库,该数据库的数据可以很容易的重新构造.为了提供数据库中磁盘数据的访问速度,下面磁盘技术中采用哪种方法可以满足该要求: A

A. RAID 0 B.RAID 1 C. RAID 0+1 D.RAID 5

  1. 一个企业有大量的数据需要存储在数据库中,企业要求数据的稳定性存储和数据开速访问,但不想使用太多的磁盘进行冗余存储,下面磁盘技术中采用哪种方法可以满足该要求: D
    A. RAID 0 B.RAID 1 C. RAID 0+1 D.RAID 5

  2. 在JDBC提供的数据库编程方法中提供了几种JDBC和数据库的连接方法: C
    A.5 B.2 C.4 D.1

A.在死锁预防中,等待–死亡法是中止优先级高的事务 (终止优先级低的)
B.在死锁预防中,受伤–等待法是优先级高的事务可能等待优先级低的事务释放锁
C.使用死锁预防的系统中不会出现死锁。
D.使用死锁判断的系统会不会出现死锁。???

  1. 下面那个说法正确的是 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是一个关键字

  1. 数据库系统管理员按照事务的方式执行下面的语句: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
    ???
  1. 下面关于索引说法正确的是: A

A. 聚集索引必然是稠密索引
B. 在数据库中只能创建一个稀松索引?
C. 在数据库中只能创建一个聚集索引
D. 索引文件中一定不包括记录的详细数据

  1. 有关系模式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)是无损分解
    用眼看!
    例子
  2. 有关系模式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

  1. 下面说法正确的是: CD
    A.在任何情况下严格的2PL锁能够保证调度的可串行化.
    B.在一个表作查询时需要先给符合条件的查询上记录加上S锁然后给表加上IS锁.

C.在一个表作查询时需要先给表加上IS锁然后给符合条件的查询上记录加上S锁
D.在一个表上同时可以加上IS锁和IX锁

  1. 下面哪个调度会出现死锁: 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 没有死锁

  1. 下面哪个调度是冲突可串行的调度 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
有关系有关系模式
- Sailors(sid:integer,sname:string,rating:integer),
- Boats(bid:interger,bname:string,color:string)
- Reserves(sid:integer,bid:integer,day:datetime)
各关系模式的关键字用下划线表示,
其中Reserver的关键字中sid来自Sailors,bid来自Boats,Reserver的记录表示水手的订船记录。

1.请用关系代数表达式写出下面的查询(4分)
查找只定过同一艘船的水手的sid。

不会写,答案也没看懂!

2.用元组关系演算表达式写出下面的查询(2分)
查找定了红色船的水手的sid



3.请用SQL语句写出下面的查询(16分)
1) 查找订过红色船或订过绿色船水手的姓名(3分)


Select s.sname from sailors s,reserves r,boats b
Where s.sid=r.sid and r.bid=b.bid and (b.color=’red’ or b.color=’green’)


2)将水手按级别(rating)分组,查找平均年龄最小的级别组(6分)

Select temp.rating,temp.avg_age
From (select rating,avg(age) as avg_age from sailors
Group by rating) as temp
Where temp.avg_age=
(select min(temp1.avg_age) from temp temp1)


3) 查找定了所有红色船的水手的姓名(6分)
Select s.sname from sailors s
where not exists(select b.bid from boats b where b.color=’red’ except
Select r.bid from reserves r where r.sid=s.sid)

定了的红色船 - 所有的红色船 = null 那就说明定了所有的红色船


4.有关系模式
- employees(ssn:char(10),name:char(20),age:int),其中ssn是employees的主关键字,
- departments(did:char(5),dname:char(20)), 其中did是departments的主关键字.
- work_in( ssn:char(10),did:char(5),from:date,to:date), 其中(ssn,did,from,to)是work_in的主关键字,did,ssn分别是指向deparments,employess的外关键字。

表示员工在某段时间内工作与某个部门。另外还要求每个的员工都要工作与某个部门,每个部门都要有人工作。请用SQL语句创建work_in关系,并表达出每个的员工都要工作与某个部门,每个部门都要有人工作这个约束条件。(5分)
Create table work_in(
ssn char(10),
did char(10),
from date,
to date,
primary key(ssn,did,from,to),
foreign key ssn reference employees,
foreign key did reference departments)
create assert e_d(
check(select count(*) from departments=select count(distinct did) from work_in) and
check(select count(*) from employees=select count(distinct sid) from work_in)
)



5. 请用Armstrong公理证明,若X->Y,Y->Z.则X->Z(5分)
>根据函数依赖的定义:因为X->Y,Y->Z成立所以对于关系模式R的任意一个实例中的任意两个元组
t1,t2.如果t1.X=t2.X那么t1.Y=t2.Y.如果t1.Y=t2.Y 那么t1.Z=t2.Z.
所以对于任意的两个元组t1,t2 当t1.X=t2.X 则t1.Z=t2.Z
所以XZ

6. 设有关系模式R,F={A->C,C->A,B->AC,D->AC,BD->A}是R的函数依赖集(8分)
>1)请求出R的函数依赖最小集(5分)
先将函数依赖的右边变成单个属性
F={ A->C,C->A ,B->A,B->C,D->A,D->C,DB->A}
除去函数依赖左边的多于属性
因为AC,CA ,BA,BC,DA,DC左边都是单个属性不用检查
对于DB->A,除去D后,B的属性闭包=BAC 包括A 所以D是多余属性则DB->A变成,B->A
所以函数依赖集变为F1={ AC,CA ,BA,BC,DA,DC}
除去多余的函数依赖
a. 去掉A->C 在F1-{A->C}中 A的属性闭包=A 所以AC不是多于依赖
b. 去掉C->A 在F1-{C->A}中 C的属性闭包=C 所以CA不是多于依赖
c. 去掉B->A 在F1-{B->A}中 B的属性闭包=BCA 所以BA是多于依赖F1={ A->C,C->A , B->C,D->A,D->C}
d. 去掉C->A 在F1-{B->C}中 B的属性闭包=B 所以BC不是多于依赖
e. 去掉D->A 在F1-{D->A}中D的属性闭包=DCA 所以DA是多于依赖F1={ A->C,C->A , B->C,D->C}
R的函数依赖最小集是 F’={ A->C,C->A , B->C,D->C}
[click](https://blog.csdn.net/sumaliqinghua/article/details/86246762)
- 右侧编程单个属性
- 删除多余属性
- 再拆左边非单属性

2)找出一个关键字,并证明其是关键字(3分)
>BD是一个关键字.
因为BD的属性闭包=BDCA 是R的属性全集
B的属性闭包是BCA不是R的属性全集
D的属性闭包是DCA不是R的属性全集
这样不存在BD的真子集也能是的该真子集的属性闭包是R的属性全集所以BD是R的关键字


### 并发控制
- 多用户数据库系统
允许多个用户同时使用的数据库系统
- 特点: 在同一时刻并发运行的事务数可达数百上千个
- 多事务执行方式
- 事务串行执行
- 1.每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
- 2.不能充分利用系统资源,发挥数据库共享资源的特点
- 交叉并发方式
- 1.在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行
- 2.单处理机系统中的并行事务并没有真正地并行运行事务,但能够减少处理机的空闲时间,提高系统的效率
- 同时并发方式
- 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
- 最理想的并发方式,但受制于硬件环境
- 更复杂的并发方式机制
- 事务并发执行带来的问题
- 会产生多个事务同时存取同一数据的情况
- 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性
- DBMS必须提供并发控制机制
- 并发控制机制是衡量一个DBMS性能的重要标志直之一
##### 并发控制的概述
**事务时并发控制的基本单位**
- 并发控制机制的任务
- 对并发操作进行正确调度
- 保证事务的隔离性
- 保证数据库的一致性
- 并发操作带来的数据不一致性
- 丢失修改
![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/s1.png)
两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失
- 不可重复读
包括三种情况
- 事务T1读取某一数据后,**事务T2对其做了修改**,当事务T1再次读该数据时,得到与前一次不同的值 (读-修改)
![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/s2.png)
- T1读取B=100进行运算
- T2读取同一数据B,对其进行修改后将B=200写回数据库。
- T1为了对读取值校对重读B,B已为200,与第一次读取值不一致
- 事务T1按一定条件从数据库中读取了某些数据记录后,**事务T2删除了其中部分记录**,当T1再次按相同条件读取数据时,发现某些记录消失了 (读-删除)
- 事务T1按一定条件从数据库中读取某些数据记录后,**事务T2插入了一些记录**,当T1再次按相同条件读取数据时,发现多了一些记录。(读-插入)
**读插入和读删除有时也叫做幻影现象.
- 读 脏数据
- 事务T1修改某一数据,并将其写回磁盘
- 事务T2读取同一数据后,T1由于某种原因被撤销
- 这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
- T2读到的数据就为“脏”数据,即不正确的数据
![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/s3.png)
- T1将C值修改为200,T2读到C为200
- T1由于某种原因撤销,其修改作废,C恢复原值100
- 这时T2读到的C为200,与数据库内容不一致,就是“脏”数据
- 数据不一致性: **由于并发操作破坏了事务的隔离性**
- 并发控制就是要用**正确的方式调度并发操作**,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性
- 对 数据库的应用有时允许有些不一致性,可以降低对一致性要求以减少系统开销
- 并发控制的主要技术
- 封锁
- 时间戳
- 乐观控制法
- 多版本并发控制 (MVCC)

##### 封锁
- 基本封锁类型
- 排它锁 X锁
- 共享锁 S锁

- 排它锁
- 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁.
- 保证其他事务在T释放A上的锁之前不能再读取和修改A
- 排它锁又称写锁
- 共享锁
- 若事务T对数据对象A机上S锁,则事务T可以读但不能修改A,其他事务只能再对A加S锁,而不能再加X锁,知道T释放A上的S锁
- 保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
- 共享锁又称读锁

![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/suo1.png)
##### 封锁协议
- 在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议
- 合适申请X锁或S锁
- 持锁时间
- 何时释放
- 一级封锁协议
- 事务T在修改数据R之前必须先对其加X锁,知道事务结束才释放
- 一级封锁协议可以防止丢失修改,并保持事务T是可恢复的
- 不能保证可重复读和脏读
- 二级封锁协议
- 一级封锁协议加上事务T在读取数据R之前必须显对其加S锁,读完后即可释放S锁(短锁)
- 可以方式丢失修改和读脏数据
- 读完数据后即可释放S锁,所以不能保证可重复读
- 三级封锁协议
- 一级封锁协议加上事务T在读取数据R之前必须显对其加S锁,事务结束才释放S锁(长锁)
- 都可防止
- 小结:
![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/suo2.png)
##### 活锁和死锁
- 活锁
>事务T1封锁了数据R
事务T2又请求封锁R,于是T2等待。
T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。
T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……
T2有可能永远等待,这就是活锁的情形
- 解决方法: 采取先来先服务策略
- 死锁:
>事务T1封锁了数据R1
T2封锁了数据R2
T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁
接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁
这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁
- 死锁的预防:
- 一次封锁法
每个事务必须一次将所有要使用的数据全部加锁
- 存在问题:
- 1.过早加锁,降低系统并发度
- 2.难于事先精确确定封锁对象
- 顺序封锁法
顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
- 存在问题:
- 1.1.维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。
- 2.难以实现:很难事先确定每一个事务要封锁哪些对象
- 死锁的诊断与解除:
- 超时法:
如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
- 优点:实现简单
- 缺点:
- 可能误判死锁
- 时限若设置得太长,死锁发生后不能即使发现
- 事务等待法:(如果事务等待图存在回路,则表示系统中出现了死锁)
- 解除死锁

##### 并发调度的可串行性
串行调度是正确的
执行结果等价于穿行调度的调度也是正确的,称为可串行化调度
- 可串行化调度
- 可串行性
- 是并发事务正确调度的准则
- 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度
嗯,稍懂
##### 两阶段锁协议
- 第一阶段是获得封锁,也称为扩展阶段
- 事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
- 第二阶段是释放封锁,也成为收缩阶段
- 事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁
遵循两阶段锁协议仍然可能产生死锁.
##### 封锁的粒度
* 封锁对象的大小称为封锁粒度.
* 封锁粒度与系统的并发度和并发控制的开销密切相关.
封锁粒度越小,并发度越高.


##### 其他并发控制机制
- 意向锁
- IS 意向共享锁
- IX
- SIX
数据锁的相容矩阵
![](https://rlj-1999-1259282223.cos.ap-beijing.myqcloud.com/%E6%95%B0%E6%8D%AE%E5%BA%93/%E4%B9%A0%E9%A2%98/suo3.png)

##### 小结
- 并发操作带的数据不一致性
- 1.丢失修改
- 2.不可重复读
- 3.读脏数据
- 数据库的并发控制通常使用封锁机制
- 基本封锁(X锁和S锁)
- 多粒度封锁(意向锁)
- 活锁和死锁
- 活锁
- 死锁(预防,检测)
- 解决数据不一致的并发控制协议:三级封锁协议
- 并发事务调度的正确性
- 可串行性
- 并发操作的正确性则通常由两阶段锁协议来保证
- 两阶段锁协议是可串行化调度的充分条件,但不是必要条件
- 冲突可串行性



[推荐阅读1](https://blog.csdn.net/sumaliqinghua/article/details/86246762)
[推荐阅读2](https://blog.csdn.net/sumaliqinghua/article/details/85872446#commentBox)
[不错的文章](https://blog.csdn.net/weixin_42578658/article/details/90744175)

有关系模式Sailors(sid:char(10),sname:char(20),rating:int,age:int),其中sid是主关键字,sid表示水手的编号,sname表示水手的姓名,rating表示水手的级别,age表示水手的年龄。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的主关键字。
```sql
1.查找至少定过两艘不通船的水手的编号

Reserves R1
Πsid(sid1=sid and bid1<>bid)(R1×Reserves)

1
2
3
4
5
6
7
8
9
2.查找水手中年龄最大的水手编号。
先找出所有小于过其他数的数
然后减去这个集合就是最大的了
age < age1
R1:= Πage,sid(Sailors)
R2:= ρR2(age1,sid1)(R1)
R3:= Πage,sid(R1 ∞(age<age1)R2)
R4:= R1-R3
R5:= Πsid(R4)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
3.查找所有水手的定船信息,并将结果按水手编号和船的编号排序(水手编号相同再排船的编号)。(5分)

order by s1,s2 从小到大
order by s1 desc; 从大到小

select * from reserves
order by s.sid,b.bid
4.删除名字叫lubber的水手的定船信息。(5分)
insert into R(a1,a2..) values (v1,v2...)
delete from reserves where reserves.sid = (select s.sid from sailors where s.sname="lubber")

5.查找定了103号船的水手的详细信息。(4分)
select * from sailors s, reserves r
where s.sid=r.sid and b.bid = 103

6.查找级别最高的水手中年龄最小的水手编号。(6分)

先找级别最高的还是用减法

select s1.sid
from sailors s1
where s1.rating >= ALL(select s2.rating from sailors s2)
intersect
select s1.sid
from sailors s1
where s1.age = min (select s2.age from sailors s2)

7.根据下面的要求创建学生表 (5分)
某学院需要完成一个学生选课及成绩管理系统,该系统要求能够登记,修改,查询,统计学生、课程、选课的基本信息。
学生的基本信息包括:学号(sid:char(10)),姓名(name:char(10)),性别(gender:char(2)),入学年份(grade:char(4))。
课程的基本信息包括:课程编号(cid:char(10)),课程名称(cname:char(10)),学分(credit:char(10))。
选课信息:学生学号(sid:char(10)),课程号(cid:char(10)),选课年份(years:char(4)),成绩 (mark:int)。要求学生基本信息中性别的可选着值只能是(男或女),所有的学生在2014年全部都要选课。

create table student(
sid char(10),
name char(10),
gender char(2),
grade char(4),
primary key (sid)
);
create table class(
cid char(10),
cname char(10),
credit char(10),
primary key (cid)
);
create table xuanke(
sid char(10),
cid char(10),
years char(4),
mark int,
constraint fx_sid foreign key (sid) references student(sid),
constraint fx_cid foreign key (cid) references class(cid)
)
8.设有关系模式R(A,B,C,D),其上的函数依赖集:F={A→C,C→A,B→AC,D→AC} (15分)
(1).计算(AD)+。 (2分)
AD+ = ADC

(2).求F的函数依赖最小等价依赖集。 (5分)
先拆右边不为单
A→C,C→A,B→A,B→C,D→A,D→C
因为B→A,A→C可以推出B→C 删除 B→C 同理删除 D→C
然后剩下
A→C,C→A,B→A,D→A
若删除 A→C,A+=A
若删除 C→A,C+=C
同理
最后F的最小等价依赖集为
{A→C,C→A,B→A,D→A}

(3).求R的一个关键字。 (3分)

L:BD
R:
LR:A C
N:
BD+=BDAC
所以BD是R的一个关键字

(4).将R分解成满足3NF并具有无损连接性与保持依赖性。(5分)

已知R的最小依赖集为
A→C,C→A,B→A,D→A

BD是关键字

AC,CA,BA,DA, BDC加入BD
则 分解为AC,BA,DA,BD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  有关系模式 employee(ssn:string,name:string,city:string)
department(did:string,cname:string,city:string)
works(ssn:string,did:stirng,salary:real)
各关系模式的关键字用下划线表示,其中works的关键字中的ssn来自employee,cid来自department. 关系模式work表示员工工作与某个部门,并且记录员工的工资.
1.查找员工人数最少的部门编号.
Select temp.did
From (Select count(*) as nu,did
From department D,works W
Where D.did=W.did
Group by(did)) As temp
Where Temp.nu = (SELECT MIN (Temp.nu) FROM Temp)


2.查找在所有部门工作过的员工的姓名.
SELECT e.name
FROM employess e
WHERE NOT EXISTS
((SELECT D.did
FROM Department D)
EXCEPT
(SELECT W.did
FROM Work W
WHERE W.ssn=e.ssn))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
找出至少两种/三种.... group by havaing count() >=2(3/4);
SELECT M.maker
FROM
(SELECT maker,
R.model
FROM PC P,
Product R
WHERE SPEED >= 3.0
AND P.model=R.model

UNION

SELECT maker,
R.model
FROM Laptop L,
Product R
WHERE speed >= 3.0
AND L.model=R.model
) M
GROUP BY M.maker
HAVING COUNT(M.model) >= 2 ;
至少三艘船...
SELECT O.battle
FROM Ships S ,
Classes C,
Outcomes O
WHERE C.Class = S.class
AND O.ship = S.name
GROUP BY C.country,
O.battle
HAVING COUNT(O.ship) >= 3;
3. 查找定了所有船的水手的编号和姓名

sql
select s.sid,s.name
from saliors
where not exists (
select b.bid
from boats b
except
select r.bid
from reserves r
where r.sid=s.sid
)
select s.sid,s.sname
from sailors s
where not exist (
select b.bid
from boats b
where not exists (
select r.bid
from reserves r
where r.bid=b.bid
and r.sid=s.sid
)
)
这个人如果都定过就不存在有没订过的船
1)找这人没定过的船,
2)没找到 not exist 成立 选出这个人

4. 找最大订船数量
select sid,cbid
from (
select count(bid) cbid,sid
from R
group by sid
)T1
where T1.cbid = (select max(cbid) from T1)

4. 查找订过红色船也订过绿色船水手的编号和姓名

Select 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’

5. 统计各班学生的数据库原理的最高分。

select s.class,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

select max(grade) from student natural join course natural join enrolled
6. 查找数据库原理课程平均分最高的班级中数据库原理课程的最低分。
创建一个视图??

select max(T1.avg_grade)
(select avg(e.grade) as avg_grade
from students s,course c,enrolled e
where c.cid=e.cid and cname= '数据库原理' and
s.sid = e.sid
group by s.class
) T1

2. 订过所有船的水手的姓名及编号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
select s.sid,s.name
from saliors
where not exists (
select b.bid
from boats b
except
select r.bid
from reserves r
where r.sid=s.sid
)

4. 查找没有定过船的水手消息(sid,sname,rating,age)
select s.sid,s.name,s.rating,s.age
from sailors
except
select s.sid,s.name,s.rating,s.age
from sailors nature join reserves
  1. 将水手的级别分为初级,中级,高级,其中初级表示为 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. 统计每个水手订船的次数,并按订船次数降序排序
    1
    2
    3
    4
    5

    select sname, count(*) num
    from sailors natural join reserves
    group by sid
    order by num desc
  2. 在 club 数据库中定义一个合适的对象,能够实现下面的功能
    当使用 insert 语句对 sailors 表插入记录时如果某些记录的 age 值小于 19,同时将这些 age 小于 19 的记录插入到 yangsaliors 表中。
1
2
3
4
5
6
7
create 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)

查找选修了全部课程的学生的学号、姓名 (两种语法 )

工资大于某个数值的 员工的ID以及最高的工资 并按照员工的序号进行排序
某一列进行重命名,给最高的工资重命名 要求这一列都是最高的工资

关系代数 5分
查找至少选择了两门、三门课程的学生
关系代数表示约束 主键外键 用两种方式来表的
两个学生的学号是一样的 =空集 属于

规范化理论 8分

问答题24分
1.授权图 画图
2.给一个调度 有读写 什么叫有冲突的
两个事物对同一个事物的读与写
看一个调度是否是可串行化的 画一个优先图 没有环 然后给等价的串行调度
3.关于日志恢复的 日志记录 redo日志 undo日志
书上例子 根据这段日志 来恢复磁盘上的数据 以及恢复之后是什么样子的 书上的例题
4.数据库设计题 12分
给一个描述 如图书馆、购物网站的设计图 主键必须写下划线。

冲突是指 不同的事务对同一数据的读写操作和写写操作**

Thank you for your support