文章目录

  • 一:考察关系代数表达式
    • (1)说明
    • (2)典型例题
  • 二:考察SQL语言
    • (1)说明
    • (2)典型例题
  • 三:查询树及其优化
    • (1)说明
    • (2)典型例题
  • 四:E-R模型转关系模型
    • (1)说明
    • (2)典型例题
  • 五:有关范式
    • (1)说明
    • (2)典型例题
  • 六:关于数据库恢复
    • (1)说明
    • (2)典型例题
  • 七:闭包
    • (1)说明
    • (2)典型例题
  • 八:求解候选码
    • (1)说明
    • (2)典型例题
  • 九:有关锁的问题
    • (1)说明
    • (2)典型例题

一:考察关系代数表达式

(1)说明

  • 先看投影放在外
  • 再看选择放在内

注意符号

(2)典型例题

现有关系数据库如下:
学生(学号,姓名,性别,专业、奖学金)
课程(课程号,名称,学分)
学习(学号,课程号,分数)
1.检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数;
2.检索学生成绩得过满分(100分)的课程的课程号、名称和学分;
3.检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业;
4.检索没有任何一门课程成绩在80分以下的学生的信息,包括学号、姓名和专业;

(1)Π学生.学号,姓名,课程名,分数(σ专业=′国家贸易′∧奖学金>0(学生⋈课程⋈学习)\Pi_{学生.学号,姓名,课程名,分数} (\sigma_{专业='国家贸易'\land 奖学金>0}(学生 \bowtie 课程 \bowtie 学习)Π学生.学号,姓名,课程名,分数​(σ专业=′国家贸易′∧奖学金>0​(学生⋈课程⋈学习)

(2)Π课程号,名称,学分(σ分数=100(课程⋈学习))\Pi_{课程号,名称,学分}(\sigma_{分数=100}(课程 \bowtie 学习))Π课程号,名称,学分​(σ分数=100​(课程⋈学习))

(3)Π学号,姓名,专业(σ奖学金<=100∧分数>95(学生⋈学习))\Pi_{学号,姓名,专业}(\sigma_{奖学金<=100 \land 分数>95}(学生 \bowtie 学习))Π学号,姓名,专业​(σ奖学金<=100∧分数>95​(学生⋈学习))

(4)Π学号,姓名,专业(σ(学生))−Π学号,姓名,专业(σ分数<80(学生⋈学习))\Pi_{学号,姓名,专业}(\sigma(学生))-\Pi_{学号,姓名,专业}(\sigma_{分数<80}(学生\bowtie学习))Π学号,姓名,专业​(σ(学生))−Π学号,姓名,专业​(σ分数<80​(学生⋈学习))


设有学生-课程关系数据库,其数据库关系模式(表名与属性名只取英文名)为:
学生S(学号S#,姓名SN,所在系SD,年龄SA)、
课程C(课程号C#,课程名称CN,先修课号PC#)、
学生选课SC(学号S#,课程号C#,成绩G)
(1)求学号为95001的学生所选的成绩为60分以上的课程号;
(2)求选修了“数据库概论”,并且成绩为80或90的学生的学号和姓名;★
(3)求选修了全部(有全部一般会使用到除)课程的学生学号、姓名及其所在系名★

(1)ΠC#(σS#="95001∧G>=60(SC))\Pi_{C\#}(\sigma_{S\#="95001 \land G>=60}(SC))ΠC#​(σS#="95001∧G>=60​(SC))

(2)ΠS#,SN(σC#="数据库概论"(C)⋈σG=80或G=90(SC)⋈(S))\Pi_{S\#,SN}(\sigma_{C\#="数据库概论"}(C) \bowtie \sigma_{G=80 或G=90} (SC) \bowtie(S))ΠS#,SN​(σC#="数据库概论"​(C)⋈σG=80或G=90​(SC)⋈(S))

(3)ΠS#,SN,SD(S⋈(ΠS#,C#(SC)÷ΠC#(C)))\Pi_{S\#,SN,SD}(S \bowtie (\Pi_{S\#,C\#}(SC)\div\Pi_{C\#}(C)))ΠS#,SN,SD​(S⋈(ΠS#,C#​(SC)÷ΠC#​(C)))





【答案】

(1):ΠSNO(σJNO=′J1′(SPJ))\Pi_{SNO} (\sigma_{JNO='J1'}(SPJ))ΠSNO​(σJNO=′J1′​(SPJ))

(2):ΠSNO(σJNO=′J1′∧PNO=′P1′(SPJ))\Pi_{SNO} (\sigma_{JNO='J1' \land PNO='P1'}(SPJ))ΠSNO​(σJNO=′J1′∧PNO=′P1′​(SPJ))

(3):ΠSNO(ΠSNO,PNO(σJNO=′J1′(SPJ))⋈ΠPNO(σCOLOR=′红′(P)))\Pi_{SNO}(\Pi_{SNO,PNO}(\sigma _{JNO='J1'}(SPJ))\bowtie \Pi_{PNO}(\sigma_{COLOR='红'}(P)))ΠSNO​(ΠSNO,PNO​(σJNO=′J1′​(SPJ))⋈ΠPNO​(σCOLOR=′红′​(P)))

(4):ΠJNO(SPJ)−ΠJNO(σcity=′天津′∧Color=′红′(S∧SPJ∧P))\Pi_{JNO}(SPJ)-\Pi_{JNO}(\sigma_{city='天津' \land Color='红'}(S\land SPJ \land P))ΠJNO​(SPJ)−ΠJNO​(σcity=′天津′∧Color=′红′​(S∧SPJ∧P))

(5):ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=′S1′(SPJ))\Pi_{JNO,PNO}(SPJ) \div \Pi_{PNO}(\sigma_{SNO='S1'}(SPJ))ΠJNO,PNO​(SPJ)÷ΠPNO​(σSNO=′S1′​(SPJ))

二:考察SQL语言

(1)说明

详细语法见专栏笔记,重点有以下几种

  • 基本表的创建、修改
  • 索引的建立
  • Select的各种语句
  • 数据的更新、删除
  • 权限

下方语句仅供参考,几乎涵盖了考试所有考察的SQL语句

//创建基本表
CREATE TABLE SC
(Sno CAHR(9) PRIMARY KEY,Cno CHAR(9) PRIMARY KEY,Sage SMALLINT NOT NULL,//PRIAMRY KEY(Sno,Cno)FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno)
);//修改基本表
ALTER TABLE Student ADD Sname CHAR(9) NOT NULL
ALTER TABLE Student ADD COLUMN Sage CHAR;
ALTER TABLE Student ADD UNIQUE(Cno,Cname)
ALTER TABLE Student DROP COLUMN Sname CASCADE//删除基本表DROP TABLE Student CASCADE//建立索引
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);//修改索引
ALTER INDEX SCno RENAME TO SCSno;//查询单表
SELECT  Sname,2022-Sage FROM Student;//属性列可以参与运算
SELECT Sname ‘姓名’,Sage '年龄' FROM Student;//起别名
SELECT DISTINCT Sno FROM SC;//消除重复行
SELECT Sno,Grade FROM SC WHERE Grade > 85;//满足某条件
SELECT Sname,Sdept WHERE Sdept IN('MA','CS');
SELECT Sname FROM Student WHERE Sname='刘%';
SELECT * FROM Student WHERE Sdept='CS'AND Sage < 20;//多重条件
SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY GRADE DESC//ORDER BY 子句
SELECT AVG(Grade) FROM SC WHERE Cno='2';//聚集函数
SELECT Sno,MAX(Grade) FROM SC WHERE Cno='2';
SELECT Sno,AVG(Grade) avg FROM SC GROUP BY Sno avg >=80;//GROUP BY子句//连接查询
SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno;//自然连接
SELECT Student.Sno,Sname FROM Student,SC where Student.Sno=SC.Sno AND  Cno='2' AND Grade > 80;
SELECT ONE.Cno,THREE.Cpno,FROM Course ONE,Course TWO,Course THREE WHERE ONE.Cpno=TWO.Cno AND TWO.Cpon=THREE.Cno;//自身连接
SELECT Sno,SC.Cno,Grade,Course.Cno,Cname,Cpno,Ccredit FROM SC INNER JOIN Course ON (SC,Cno=Course.Cno);//INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN//嵌套查询
SELECT Student.Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Studetn WHERE Snmae="刘晨");//IN谓词查询
SELECT Sno,Cno FROM SC x WHERE Grade >=(SELECT AVG(Grade) FROM SC WHERE x.Sno=Sno)//带有比较运算符的查询
SELECT Sname,Sage FROM Student WHERE Sage < ANY(Select Sage from student WHERE Sdept='CS') AND Sdept!='CS';//带有ANY(SOME)或ALL谓词的子查询//插入数据
INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES('201215128','陈冬','男',IS,18);//插入元组
INSERT INTO Student('201215126','张世民','男','18','CS';);
INSERT INTO Dept_age(Sdept,Age) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;//插入子查询结果//修改数据
UPDATE Student SET Sage=22 WHERE sNO='2012151002';//修改某一个元组的值
UPDATE Student SET Sage=Sage+1;//修改多个元组的值
UPDATE SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');//带子查询的修改语句//删除数据
DELETE FROM Student WHERE Sno='201215128';
DELETE FROM SC;
DELETE FROM SC WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');//创建视图视图
CREATE VIEW IS_student AS SELECT Sno,Sname FROM Student WHERE Sdept='IS';\
CREATE VIEW Stu_Grade_Avg(Sno,Savg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;//修改视图
UPDATE IS_student Set Sname='刘晨' WHERE Sno='201215125' WITH CHECK OPTION;//授权授予
GRANT SELECT ON TABLE Student TO U1;
GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3;
GRANT SELECT ON TBALE SC TO PUBLIC;
GRANT UPDATE(Sno),SELECT ON TBALE Student TO U4;
GRANT INSERT ON TBALE SC TO U5 WITH GRANT OPTION;//允许再授权//权限回收
REVOKE UPDATE(Sno) ON TABLE Student FROM U4;
REVOKE SELECT ON TABLE SC FROM PUBLIC;
REVOKE INSERT ON TABLE SC FROM U5 CASCADE;//级联收回//角色及其授权、回收
CREATE ROLE R1;//创建一个角色R1
GRANT SELECT,UPDATE ON TABLE Student TO R1;//让角色拥有某种权限
GRANT R1 TO U1,U2,U3;//将角色R1拥有的权限赋给用户
REVOKE R1 FROM U1;//通过角色收回权限//完整性约束命名子句
CREATE TABLE Student//创建
(Sno NUMERIC(6) CONSTRAINT C1 CHECK(Sno BETWEEN 1 AND 100),Sname CHAR(20) CONSTRAINT C2 NOT NULL,Ssex CHAR(2) CONSTRAINT C3 CHECK(Ssex IN ('男','女')),Spro CHAR(10)CONSTRAINT C4 PRIMARY KEY(Sno),CONSTRAINT C5 FOREIGN KEY(Spro) REFERENCES P(Spro)
);
ALTER TABLE Student DROP CONSTRAINT C1;//删除
ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 1 AND 10);//修改//断言
CREATE ASSERTION ASS CHECK
(60 >=ALL(SELECT count(*)FROM SCGROUP BY Cno));//参照完整性中当删除或修改被参照表时参照表所作的动作
CREATE TABLE SC
(Sno CHAR(9)Sno CHAR(4) Grade SMALLINT,//是外码也是主码,故不能取空值,实体完整性PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno)ON DELETE CASCADE //删除Student表的元组时,级联删除本表相应元组ON UPDATE CASCADE, //更新Student表中的Sno时,级联更新本表相应元组FOREIGN KEY(Cno) REFERENCES Course(Cno)ON DELETE NO ACTION //删除Course表的元组造成不一致时,拒绝执行ON UPDATE CASCADE //更新Course表中的Cno时,级联更新本表相应元组
);

(2)典型例题

【答案】

SELECT * FROM S WHERE A='10';SELECT A,B FROM S;SELECT A,B,S.C,S.D,E,F FROM S,T WHERE S.C=T.C AND S.D=T.D;SELECT * FROM S,T WHERE S.C=T.C;SELECT * FROM S,T WHERE A<E;SELECT S.C,S.D,T.* FROM S,T;


  • 题目链接:(数据库系统概论|王珊)第二章关系数据库:习题

【答案】

SELECT SNO FROM SPJ WHERE JNO='J1';SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';SELECT SPJ.SNO FROM SPJ,P WHERE SPJ.PNO=P.PNO AND JNO='J1' AND COLOR='红';SELECT JNO FROM SPJ WHERE JNO NOT IN
(SELECT JNO FROM SPJ,S,P WHERE S.CITY='天津' AND COLOR='红' AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO)①:先查询S1供应的零件号
SELECT PNO FROM SPJ WHERE SNO='S1' ,其结果为(P1,P2)
②:查询哪一个工程即使用P1又使用P2
SELECT JON FROM SPJ WHERE PNO='P1' AND JNO IN (SELECT JNO FROM SPJ WHERE PNO='P2');

SELECT SNAME,CTIY FROM S;SELECT PNAME,COLOR,WEIGHT FROM P;SELECT JNO FROM SPJ WHERE SNO='S1';SELECT PNAME,QTY FROM P,SPJ WHERE SPJ.PNO=P.PNO AND JNO='J2';SELECT PNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.CITY='上海';SELECT JNAME FROM SPJ,S,J WHERE SPJ.SNO=S.SNO AND SPJ.JNO=J.JNO AND S.CITY='上海';SELECT JNO FROM SPJ WHERE JNO NOT IN(SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.CITY='天津'
);UPDATE P SET COLOR='蓝' WHERE COLOR='红';UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6';DELETE FROM S WHERE SNO='S2' DELETE FROM SPJ WHERE SNO='S2';INSERT INTO SPJ VALUES('S2','J6','P4',200);

【答案】

CREATE VIEW VSP AS SELECT SNO,SPJ.PNO,QTY FROM SPJ,J WHERE PPJ.JNO=J.JNO AND J.JNAME='三建'SELECT PNO,QTY FROM VSPSELECT * FROM VSP WHERE SNO='S1';

【答案】


GRANT ALL PRIVILEGES ON Student,Class TO U1 WITH CHECK OPTION;GRANT SELECT,UPDATE(Address) ON Student TO U2GRANT SELECT ON Class to PUBLICGRANT SELECT,UPDATE ON Student TO R1;GRANT R1 TO U1 WITH CHECK OPTION;

  • 职工:Workers
  • 部门:Department

【答案】

(1)
GRANT SELECT ON Workers,Department TO 王明;(2)
GRANT INSERT,DELETE ON Workers,Department TO 李勇;(3)
GRANT SELECT ON Workers WHEN USER()=NAME TO ALL;(4)
GRANT SELECT,UPDATE(工资)ON Workers TO 刘星;(5)
GRANT ALTER TABLE ON Workers,Department TO 张新;(6)
GRANT ALL PRIVILEGES ON Workers,Department TO 周平 WITH CHECK OPTION;(7)
CREATE VIEW 部门工资 ASSELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)FROM 职工,部门WHERE 职工.部门号=部门.部门号GROUP BY 职工.部门号GRANT SELECT ON 部门工资 TO 杨兰;

【答案】

  • 把GRANT换成REVOKE,把TO换成FROM即可

三:查询树及其优化

(1)说明

  • 关于查询及查询优化见此文章:(数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化

  • 主要会画三种树:最初的语法树,关系代数语法树,优化后的查询树

  • 题目一般会给你SQL语句(或者这个SQL语句都要你自己写),然后根据画出其对应的语法树,接着根据优化规则进行优化

(2)典型例题

【答案】

首先将SQL语句转为关系代数表达式

ΠCname(σStudent.Sdept=′IS′(σSC.Cno=Course.Cno(σStudent.Sno=SC.Sno(Student×SC)×Course)))\Pi_{Cname}(\sigma_{Student.Sdept='IS'}(\sigma_{SC.Cno=Course.Cno}(\sigma_{Student.Sno=SC.Sno }(Student × SC) × Course)))ΠCname​(σStudent.Sdept=′IS′​(σSC.Cno=Course.Cno​(σStudent.Sno=SC.Sno​(Student×SC)×Course)))

将关系代数表达式转为查询树


优化



【答案】


【例】查询选修了数据库课程的女生学号与姓名,如下是SQL语句

SELECT Student.Sno,Sname FROM Student,SC,Course
WHERE Cname='datebase' AND Ssex='女';

将SQL语句转为关系代数表达式

ΠSno,Sname(σCname=′数据库′∧Ssex=′女′(SC⋈Course⋈Student))\Pi_{Sno,Sname}(\sigma_{Cname='数据库' \land Ssex='女'}(SC \bowtie Course \bowtie Student))ΠSno,Sname​(σCname=′数据库′∧Ssex=′女′​(SC⋈Course⋈Student))

将关系代数表达式转为查询树

查询树优化

①:选择条件复杂,先分解选择条件


②:将选择运算尽可能移动到树的叶端


③:涉及了投影运算,所以也把它尽可能移动到树的叶端

  • 投影运算下移时要保留连接属性


④:对内结点进行分组

四:E-R模型转关系模型

(1)说明

  • 详细转换规则见:(数据库系统概论|王珊)第七章数据库设计-第四节:逻辑结构设计
  • 转换的过程中,能当作实体就当做实体
  • 基本考法就是先让你画E-R图,然后转为关系模型

注意

  • 同一实体间1:m 联系:可以在这个实体所对应的关系中多设一个属性,作为与该实体相联系的另一个实体的主码
  • 同一实体间m:n 联系:要为联系单独建立一个实体,该实体包含它所联系的实体的主码,同时把联系的属性纳入其中
  • 两实体间1:1联系:把联系的属性和一方实体的主码纳入到另一个实体中
  • 两实体间1:m联系:可以将“1”方实体的主码纳入“m”方实体对应的关系中作为外码,同时把联系的属性也一并纳入“m”方对应的关系中
  • 两实体间m:n联系:必须对“联系”单独建立一个关系,该关系中至少包含被它所联系的双方实体的主码,如果联系也有属性,也一并纳入该关系中
  • 两实体间弱实体联系:可以将被依赖实体的主码纳入弱实体中,作为弱实体的主码或主码的一部分
  • 两个以上实体间m:n:必须对“联系”单独建立一个关系,该关系中至少包含被它所联系的双方实体的主码,如果联系也有属性,也一并纳入该关系中

(2)典型例题

五:有关范式

(1)说明

  • 详细内容请点击跳转:(数据库系统概论|王珊)第六章关系数据理论-第二节:规范化
  • 主要考察:判断是否为第几范式;如果不是如何解决(分解)
  • 重点考察:3NF和BCNF,其中判断是否为BCNF就是看“每一个决定因素是否都包含码”(也即不存在任何属性对码的传递函数依赖和部分函数依赖)

(2)典型例题


假设某商业集团数据库中有一关系模式R如下:
R (商店编号,商品编号,数量,部门编号,关系模式),若规定
(1) 每个商店的每种商品只在一个部门销售;
(2) 每个商店的每个部门只有一个负责人;
(3) 每个商店的每种商品只有一个库存数量。
试回答下列问题:
(1) 根据上述规定,写出关系模式R的基本函数依赖;
(2) 找出关系模式R的候选码;
(3) 试问关系模式R最高已经达到第几范式?为什么?
(4) 如果R不属于3NF,请将R分解成3NF模式集

(1)

  • (商店编号,商品编号)->部门编号
  • (商店编号,部门编号)->负责人
  • (商店编号,商品编号)->库存数量

(2)(商店编号,商品编号)

(3)显而易见,存在非主属性对码的传递函数依赖(即(商店编号,商品编号)->部门编号,又(商店编号,部门编号)->负责人,所以(商店编号,商品编号)->负责人)。因此它是2NF,不是3NF

(4)分解

  • R1(商店编号,商品编号,库存数量,部门编号)
  • R2(商店编号,商品编号,负责人)

设有关系模式R(A, B, C, D, E),R中的属性均不可再分解,若只基于函数依赖进行讨论,试根据给定的函数依赖集F,分析R最高属于第几范式,并说明原因。
(1) F={AB→C, AB→E, CDE→AB}; ABD CDE
(2) F={CD→A, CD→B, AB→E}。 CD

(1)最高属于3NF。因为候选码是CDE,ABD,但AB作为决定性因素,却不包含码,也即存在主属性对码的部分函数依赖

(2)最高属于2NF。因为候选码是CD,且存在非主属性E对码的传递函数依赖

六:关于数据库恢复

(1)说明

  • 具体请跳转:(数据库系统概论|王珊)第十章数据库恢复技术-第四、五、六、七节:数据库恢复技术和数据库镜像

(2)典型例题


【答案】
(1)T1T_{1}T1​、T3T_{3}T3​重做;T2T_{2}T2​、T4T_{4}T4​回滚

(2)T1T_{1}T1​重做;T2T_{2}T2​、T3T_{3}T3​回滚

(3)T1T_{1}T1​重做;T2T_{2}T2​、T3T_{3}T3​回滚

(4)T1T_{1}T1​重做;T2T_{2}T2​回滚



【答案】

(1)A=8、B=7、C=11

(2)A=10、B=0、C=11

(3)A=10、B=0、C=11

(4)A=10、B=0、C=11

(5)A=0、B=0、C=0


具有检查点的恢复技术

系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略,如下图

  • T1T_{1}T1​:在检查点之前提交
  • T2T_{2}T2​:在检查点之前开始执行,在检查点之后故障点之前提交
  • T3T_{3}T3​:在检查点之前开始执行,在故障点时还未完成
  • T4T_{4}T4​:在检查点之后开始执行,在故障点之前提交
  • T5T_{5}T5​:在检查点之后开始执行,在故障点时还未完成

  • T3T_{3}T3​和T5T_{5}T5​在故障发生时还未完成,所以予以撤销;
  • T2T_{2}T2​和 T4T_{4}T4​在检查点之后才提交,它们对数据库所做的修改在故障发生时可能还在缓冲区中,尚未写入数据库,所以要重做;
  • T1T_{1}T1​在检查点之前已提交,所以不必执行重做操作

系统使用检查点方法进行恢复的步骤是:

①:从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录

②:由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。建立如下两个事物队列

  • UNDO-LIST:需要执行UNDO操作的事物集合
  • REDO-LIST:需要执行REDO操作的事物集合

③:从检查点开始正向扫描日志文件

  • 如果有新开始的事物TiT_{i}Ti​,则把TiT_{i}Ti​暂时放入UNDO-LIST
  • 如果有新提交的事物TjT_{j}Tj​,则把TjT_{j}Tj​从UNDO-LIST移到REDO-LIST
  • 重复,直到扫描日志文件结束

④:对UNDO-LIST中的每个事物执行UNDO操作;对REDO-LIST中每个事物执行REDO操作


用上图所示的例子,恢复步骤如下

①:建立ACTIVE-LIST,很明显ACTIVE-LIST={T2T_{2}T2​,T3T_{3}T3​}。然后初始化UNDO-LIST={T2T_{2}T2​,T3T_{3}T3​},REDO-LIST={}

②:从检查点开始正向扫描日志文件

  • 第一个读到的是事物T4T_{4}T4​建立,加入UNDO-LIST
  • 第二个读到的是事物T2T_{2}T2​提交,那么把T2T_{2}T2​从UNDO-LIST移动到REDO-LIST
  • 第三个读到的是事物T5T_{5}T5​建立,加入UNDO-LIST
  • 第四个读到的是事物T5T_{5}T5​提交,那么把T5T_{5}T5​从UNDO-LIST移动到REDO-LIST

③:对UNDO-LIST中的每个事物执行UNDO操作;对REDO-LIST中每个事物执行REDO操作

七:闭包

(1)说明

这属于离散数学的内容,专业的就不多说了,下面有一个经典的例子

U={A,B,C,D,E},R={AB->C , B->D , C->E , EC->B , AC->B},求(AB)R+_{R}^{+}R+​

  • 设X0^{0}0=AB
  • 又因为AB->C,B->D,所以X1^{1}1=ABCD
  • 因为X0≠^{0}\neq0​=X1^{1}1,继续查找(否则X1^{1}1就是闭包)
  • 又因为C->E,所以X2^{2}2=ABCDE
  • 所以(AB)R+_{R}^{+}R+​=ABCDE

(2)典型例题

设有函数依赖集F={AB→CE, A→C, GP→B, EP→A, CDE→P, HB→P, D→HG, ABC→PG},求属性D关于F的闭包D+^{+}+

  • 设X0^{0}0=D
  • 又因为D→HG,所以X1^{1}1=DHG,X0≠^{0}\neq0​=X1^{1}1
  • X2^{2}2=DHG,此时X1^{1}1=X2^{2}2
  • 所以D+^{+}+=DHG

设有函数依赖集F={AC→PE, PG→A, B→CE, A→P, GA→B, GC→A, PAB→G, AE→GB, ABCP→H},求属性集BG关于F的闭包(BG)+

  • X0^{0}0=BG
  • X1^{1}1=BGCE
  • X2^{2}2=BGCEA
  • X3^{3}3=BGCEAP
  • X3^{3}3=BGCEAPH=U
  • 故(BG)+=BGCEAPH

八:求解候选码

(1)说明

设关系模式R中U=ABC…等N个属性,U中的属性在F中有四个范围

  1. 左右出现
  2. 只在左部出现
  3. 只在右部出现
  4. 不在左右出现

算法:按照以下步骤求解候选码

  1. 只在F右部出现的属性,不属于候选码
  2. 只在F左部出现的属性,一定存在于某候选码当中
  3. 量变都没有出现的结点,一定存在于候选码中
  4. 其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码

比如

R{ABCDE}
F(AB->C,AB->E,CDE->AB)

  • 可以发现没有只在右部出现的属性
  • D只在左部出现,所以一定在候选码中

现在剩余A,B,C,E,先进行单个结合求属性闭包

  • 对于AD:AD+^{+}+=AD
  • 对于BD:BD+^{+}+=BD
  • 对于CD:CD+^{+}+=CD
  • 对于ED:ED+^{+}+=ED

不满足条件,再结合

  • 对于ABD:ABD+^{+}+=U
  • 对于ACD:ACD+^{+}+=ACD
  • 对于AED:AED+^{+}+=AED
  • 对于BCD:BCD+^{+}+=BCD
  • 对于BED:BED+^{+}+=BED
  • 对于CED:CED+^{+}+=U

所以候选码是ABD或CED

(2)典型例题

已知R(U,F),U=(A,B,C,D,E,G),F={AB->C,CD->E,E->A,A->G}。求候选码

  • 其中G只出现在右部,所以一定不属于候选码
  • 其中B,D只出现在左部,一定存在于某候选码中

现在剩余A,C,E,先单个结合

  • 对于ABD:ABD+^{+}+=ABCDEG=U
  • 对于CBD:CBD+^{+}+=U
  • 对于BDE:BDE+^{+}+=U

候选码是ABD,CBD,BDE

九:有关锁的问题

(1)说明

  • 详细内容请条件:https://zhangxing-tech.blog.csdn.net/article/details/122767899

(2)典型例题

(1)

a:t1时刻甲事务读x=1000,t2时刻乙事务读取x=1000,t3时刻x被更新为700,t4时刻,乙所更新的x还是之前读取到的那个x,所以x=800

b:Xlock x
c:W(x)=700
d:R(x)=700
e:x<-x-200
f:Unlock x

(2)给定一个并发调度,当且仅当它是可串行化的,才认为它是正确的调度。其中可串行化调度是指多个事务的并发执行结果是正确的,并且仅当其结果与按照某一次序串行执行这些事务时的结果相同,称这种调度策略为可串行化调度


a:SLOCK B
b:XLOCK A
c:写回A(=3)
d:X=A=3
e:UNLOCK A

【数据库题型大总结】应用题总结相关推荐

  1. 【数据库题型大总结】简答题总结

    文章目录 (1)非常重要 (2)可以了解 (1)非常重要 1.数据库系统的特点 [答案] 数据库系统具有一个很大的特点,那就是整体结构化.数据的结构用数据模型描述,无序程序定义和解释 数据库系统中数据 ...

  2. 【数据库题型大总结】名词解释总结

    (1)非常重要 数据:是数据库中存储的基本对象,是描述事物的符号记录 数据库:是永久存储在计算机内的,有组织的.可共享的大量数据的集合 数据库管理系统:是位于用户与操作系统之间的一层数据管理软件,和操 ...

  3. 分析型数据库受大数据市场追捧

    文章讲的是分析型数据库受大数据市场追捧,近期,大数据领域有一些值得关注的动向.首先,EMC和VMware正式公布成立新公司Pivotal.其次,Actian公司宣布收购大规模并行处理(MPP)分析数据 ...

  4. 主键和索引哪个快_数据库两大神器【索引和锁】

    前言 只有光头才能变强 索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的. 本文力求简单讲清每个知识点,希望大家看完能有所收获 声明:如果没有说明具体的数据库和存储引擎,默认指 ...

  5. 数据库如何处理数据库太大_网络数据库中的数据处理

    数据库如何处理数据库太大 Before learning the data manipulation in a network model, we are discussing data manipu ...

  6. 技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议

    摘要:如何定位分布式缓存数据库Redis大KEY问题,实操案例带你掌握优化方法. [背景] 访问Redis 5.0 cluster集群出现OOM报错,报错信息为(error) OOM command ...

  7. mysql数据库特别大怎么备份_如何备份还原mysql数据库 mysql数据库太大备份与还原方法...

    本篇文章小编给大家分享一下mysql数据库太大备份与还原方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 命令:mysqlhotcopy 这个命令会在拷贝文件之前会把表锁 ...

  8. 《实战数据库营销——大数据时代轻松赚钱之道》新书试读+文摘

    数据库营销中数据库是工具,营销是核心 简单来讲,数据库营销就是企业通过搜集和整理消费者的信息,预测消费者有多大可能去购买某种产品,同时利用这些信息给产品以精确定位,有针对性地制定营销策略以达到说服消费 ...

  9. 国产数据库南大通用新三板上市获批

    文章讲的是国产数据库南大通用新三板上市获批,据媒体报道,日前,天津南大通用数据技术股份有限公司收到全国中小企业股份转让系统名为<关于同意天津南大通用数据技术股份有限公司股票在全国中小企业股份转让 ...

最新文章

  1. JavaScript setTimeout() 介绍
  2. 第一次,触碰Web App项目,栽过的那些坑。
  3. python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
  4. 非对称加密算法RSA--转
  5. 13-mysql-子查询
  6. SpringCloud创建Config多客户端公共配置
  7. Python--SQLite学习(10.29)
  8. Http client to POST using multipart/form-data
  9. 算法|决策树算法究竟说的是什么?
  10. NumpyML : Linear Regression
  11. YOLOv3的批量图片检测以及批量输出(windows下)
  12. 在linux上将ape转成mp3,以及MP3 大小转换
  13. speedoffice(PPT)插入的表格怎么删除其中一列或者一行呢
  14. 线性代数的本质_01_向量、张成空间与基
  15. 面试问题 你如何评价你上一家公司,你觉的上一家公司怎么评价你
  16. 高中计算机竞赛学什么,什么是高中数学竞赛,要怎么去做?
  17. Solr Facet 统计查询
  18. python判断手机号运营商_如何判断手机号的运营商那?
  19. AntV X6流程图绘制程序(官方示例纯javascript+html+css)
  20. 我奋斗了10年才能和你坐在一起喝咖啡

热门文章

  1. 怎样高效入门 Vue?
  2. hadoop原来是这样的!
  3. java 完全匹配,Java 正则表达式匹配模式(贪婪型、勉强型、占有型)
  4. 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...
  5. 国自然和毕业论文的流程图用这个格式导入Word可无限放大
  6. 生物数据库建设,等你来~
  7. 安装lxml,抓取、解析网页
  8. Nitrozme Animation Studio Packages Mac(AE插件拓展包)
  9. 30销售是让用户开心的购买和消费
  10. 项目管理中网络图的看法和相关参数阅读说明