数据库应用期末复习题及答案1(6)

2019-03-15 20:18

新操作,并做同样处理。

⑷ 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。

18.试述文件系统与数据库系统的区别和联系。 答:文件系统与数据库系统的区别是:

文件系统面向某一应用程序,共享性差,冗余度大,数据独立性差,记录内有结构,整体无结构,由应用程序自己控制。

数据库系统面向现实世界,共享性高,冗余度小,具有较高的物理独立性和一定的逻辑独立性,整体结构化,用数据模型描述,由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力。

文件系统与数据库系统的联系:文件系统与数据库系统都是计算机系统中管理数据中管理数据的软件。

19.DBA的职责是什么?

答:1)决定数据库中的信息内容和结构

2)决定数据库的存储结构和存取策略

3)定义数据的安全性要求和完整性约束条件 4)监控数据库的使用和运行 5)数据库的改进和重组重构 20.试述查询优化的一般步骤。 答:1)把查询转换成某种内部表示

2) 把语法树转换成标准(优化)形式 3) 择低层的存取路径

4) 生成查询计划,选择代价最小的

21.数据库中为什么要有恢复子系统?它的功能是什么?

答:因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。

功能:是把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态),这就是数据库的恢复。

22.数据库转储的意义是什么?常用的有几种方法? 答:数据转储是数据库恢复中采用的基本技术,所谓转储即DBA定期将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。当数据库遭到破坏后可以将后备副本重新载入,将数据库恢复到转储时的状态。

转储可分为静态转储和动态转储。静态转储是在系统中无运行事务时进行的转储操作。动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。

转储还可分为海量转储和增量转储两种方式。

26

23.什么是日志文件?为什么要设立日志文件?

答:日志文件是用来记录事务对数据库的更新操作的文件。

目的是进行事物故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。

24.试述使用检查点方法进行恢复的步骤。

答:1)从重新开始文件中找到追后一个检查点记录在日志文件中的地址,由该地址在体制文件中找到最后一个检查点记录。

2)由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。

这里建立两个事务队列: ①UNDO-LIST:需要执行undo操作的事务集合; ②REDO-LIST需要执行redo操作的事务集合。 把ACTIVE-LIST暂时放入UNDO-LIST队列,

REDO队列暂时为空。

3) 检查点开始正向扫描日志文件:

①如果有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列;

②如有提交的事务T j,把Tj从UNDO-LIST队列移到REDO-LIST队列,直到日志文件结束;

4)对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。 25.什么是数据库镜像?它有什么用途?

答:根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据恢复过去,即DBMS自动保证镜像数据与主数据的一致性。

用途:1)一旦出现介质故障,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库恢复,不需要关闭系统和重装数据库副本。

2)在没有出现故障时,数据库镜像还可以

并发操作。提高数据库的可用性。 26.请给出预防死锁的若干方法。

答:在数据库中,产生 死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。

预防死锁通常有两种方法:1)一次封锁法。一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。2)顺序封锁法。顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

27.请给出检测死锁发生的方法,当发生死锁后如何解决死锁?

答:一般使用超时法或事务等待图法。

① 超时法

如果一个事务的等待时间超过了规定的时限,就认

为发生了死锁。超时法实现简单,但其不足也很明显。一是有可能误判死锁,事务因为其他原因使等待时间超过时限,系统会误认为发生了死锁。二是时限若设置得太长,死锁发生后不能及时发现。

②等待图法

事务等待图是一个有向图G=(T,U)。 T为结点的集合,每个结点表示正运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2 ,则T1、T2之间划一条有向边,从T1指向T2。事务等待图动态地反映了所有事务的等待情况。并发控制子系统周期性地(比如每隔1分钟)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。

DBMS的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务得以继续运行下去。当然,对撤消的事务所执行的数据修改操作必须加以恢复。 28.试述两段锁协议的概念。

答:所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。

1)在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;

2)在释放一个封锁之后,事务不再申请和获得对该数据的封锁。

所谓“两段”锁的含义是,事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。

29.什么是数据库的完整性约束条件?

答:完整性约束条件是指数据库中的数据应满足的语义约束条件。一般可以分为六类:

1)静态列级约束 2)静态元组约束 3)静态关系约束 4) 动态列级约束 5) 动态元组约束 6) 动态关系约束

五、应用题

1.设有下列四个关系模式: S(SNO,SNAME,CITY)

27

P(PNO,PNAME,COLOR,WEIGHT) J(JNO,JNAME,CITY)

SPJ(SNO,PNO,JNO,QTY)

其中,供应商表S由供应商号(SNO)、供应商姓名(SNAME)、供应商所在城市(CITY)组成,记录各个供应商的情况;零件表P由零件号(PNO)、零件名称(PNAME)、零件颜色(COLOR)、零件重量(WEIGHT)组成,记录各种零件的情况;工程项目表J由项目号(JNO)、项目名(JNAME)、项目所在城市(CITY)组成,记录各个工程项目的情况;供应情况表SPJ由供应商号(SNO)、零件号(PNO)、项目号(JNO)、供应数量(QTY)组成,记录各供应商供应各种零件给各工程项目的数量。分别用关系代数和SQL语言完成下列查询:

1)求供应工程项目号为J1工程零件的供应商号SNO

∏SNO(σJNO=?J1?(SPJ))

SELECT SNO FROM SPJ WHERE JNO=?J1?; 2)求供应工程项目号为J1工程零件号为P1的供应商号SNO

∏SNO(σJNO=?J1?∧PNO=?P1?(SPJ))

SELECT SNO FROM SPJ WHERE JNO=?J1? AND PNO=?P1?;

3)求供应工程项目号为J1工程红色零件的供应商号SNO

∏SNO(σJNO=?J1?∧COLOR=?红?(SPJ∞P))

SELECT SNO FROM SPJ,P WHERE SPJ.PNO=P.PNO AND P.COLOR=?红?AND JNO=?J1?; 4)求至少使用天津供应商生产的红色零件的工程号JNO

∏JNO(SPJ)-∏JNO(σcity=?天津?∧COLOR=?红?(SPJ∞P∞S)) SELECT JNO FROM SPJ,P,S

WHERE S.SNO=SPJ.SNO AND SPJ.PNO=P.PNO AND CITY<>?天津?AND COLOR<>?红?;

5)求至少用了S1供应商所供应的全部零件的工程号JNO(本题不需要用SQL语言完成)

∏JNO,PNO(SPJ)?∏PNO(σSNO=?S1?(SPJ)) 2.现有如下关系模式:

雇员(员工姓名,居住城市,居住街道) 工作(员工姓名,公司名,工资)

公司(公司名,公司所在城市) 主管(员工姓名,主管姓名)

用关系代数完成下列查询:

1)找出所有在公司名为“firstbank”的公司工作的员工,显示员工姓名。

∏员工姓名(σ公司名=?firstbank?(工作))

2)显示为“firstbank”公司工作的员工姓名和居住城市。

∏员工姓名,居住城市(σ公司名=?firstbank?(雇员∞工作))

3)找出所有为“firstbank”公司工作且工资在1000元以上的员工,显示员工姓名和工资。

∏员工姓名,工资(σ公司名=?firstbank?∧工资>1000(工作)) 4)找出每个员工工资都在1000元以上的公司,显示公司名。

∏公司名(工作)-∏公司名(σ工资<1000(工作)) 5)找出主管人员Smith领导的员工姓名及员工居住的城市。

∏员工姓名,居住城市(σ主管姓名=?Smith?(雇员∞主管)) 3.设有下列关系模式:

STUDENT(NO,NAME,SEX,BIRTHDAY,CLASS)

TEACHER(NO,NAME,SEX,BIRTHDAY,PROF,DEPART)

COURSE(CNO,CNAME,TNO) SCORE(NO,CNO,DEGREE)

其中,学生信息表STUDENT由学号(NO)、学生姓名(NAME)、性别(SEX)、出生年月日(BIRTHDAY)、班级(CLASS)组成,记录学生的情况;教师信息表TEACHER由教师号(NO)、教师姓名(NAME)、性别(SEX)、出生年月日(BIRTHDAY)、职称(FROF)、教师所在系(DEPART)组成,记录教师的情况;课程表COURSE由课程号(CNO)、课程名称(CNAME)、任课教师号(TNO)组成,记录所开课程及任课教师情况;成绩表SCORE由学生学号(NO)、课程号(CNO)、成绩(DEGREE)组成,记录学生选课情况及相应的成绩。用SQL语句实现以下操作

1)显示STUDENT表中每个学生的姓名和出生日期。 SELECT NAME,BIRTHDAY FROM STUDENT; 2)显示STUDENT表中所有姓“王”的学生记录。

SELECT * FROM STUDENT WHERE NAME LIKE ?王%?;

3)显示成绩表中成绩在60分到80分之间的所有记录。 SELECT * FROM SCORE WHERE DEGREE BETWEEN 60 AND 80;

4)显示“男”教师及其所上的课程。(显示该教师的姓名和所上的课程名)

SELECT TEACHER.NAME,COURSE.CNAME FROM TEACHER,COURSE

WHERE TEACHER.NO=COURSE.TNO AND SEX=?男?;

5)选出和“李军”同学同性别并同班的学生姓名。

SELECT NAME FROM STUDENT

WHERE SEX=(SELECT SEX FROM STUDENT WHERE NAME=?李军?)AND

CLASS=(SELECT CLASS FROM STUDENT WHERE NAME=?李军?);

28

6)向STUDENT表中插入一条学生记录。(学号:999,姓名:程功,性别:男,出生年月日:10/01/80,班级:95035)

INSERT INTO STYDENT VALUES(?999?,?程功?,?男?,?10/01/80?,?95035?);

7)在STUDENT表中将学号为“999”的学生的班号改为“95031”

UPDATE STUDENT SET=?95031?WHERE NO=?999?;

8)在STUDENT表中删除学号为“999”的学生记录。 DELETE FROM STUDENT WHERE NO=?999?; 4.设有下列四个关系模式:

S(SNO,SNAME,CITY)

P(PNO,PNAME,COLOR,WEIGHT) J(JNO,JNAME,CITY)

SPJ(SNO,PNO,JNO,QTY)

其中,供应商表S由供应商号(SNO)、供应商姓名(SNAME)、供应商所在城市(CITY)组成,记录各个供应商的情况;零件表P由零件号(PNO)、零件名称(PNAME)、零件颜色(COLOR)、零件重量(WEIGHT)组成,记录各种零件的情况;工程项目表J由项目号(JNO)、项目名(JNAME)、项目所在城市(CITY)组成,记录各个工程项目的情况;供应情况表SPJ由供应商号(SNO)、零件号(PNO)、项目号(JNO)、供应数量(QTY)组成,记录各供应商供应各种零件给各工程项目的数量。 用SQL语言完成下列操作: ①找出工程项目J2使用的各种零件的名称及其数量

SELECT PNAME,QTY FROM SPJ, P WHERE SPJ.PNO=P.PNO AND JNO=?J2?; ②找出所有零件的名称、颜色、重量

SELECT PNAME, COLOR, WEIGHT FROM P; ③找出上海厂商供应的所有零件号码

SELECT DISTINCT PNO FROM SPJ

WHERE SNO IN ( SELECT SNO FROM S WHERE CITY=?上海?);

④从供应商关系中删除S2(供应商号)的记录,并从供应情况关系中删除相应的记录

DELETE FROM S WHERE SNO=?S2?; DELETE FROM SPJ WHERE SNO=?S2?; ⑤请将(S2,P4,J6,200)插入供应情况关系

INSERT INTO SPJ VALUS(?S2?,?P4?,?J6?,200);

5.设有3个关系:

S(S#,SNAME,AGE,SEX) SC(S#,C#,CNAME)

C(C#,CNAME,TEACHER)

试用关系代数表达式表示下列查询语句:

1)检索LIU老师所授课程的课程号和课程名。 ∏C#,CNAME(σTEACHER=?LIU?(C))

2)检索年龄大于23岁的男学生的学号和姓名。 ∏S#,SNAME(σAGE>?23?∧SEX=?M?(S)) 3)检索学号为S3学生所学课程的课程名与任课教师名。 ∏CNAME,TEACHER(σS#=?S3?(SC∞C))

4)检索至少选修LIU老师所授课程中一门课的女学生姓名。

∏SNAME(σSEX=?F?∧TEACHER=?LIU?(S∞SC∞C)) 5)检索WANG同学不学的课程的课程名。

∏C#(C)-ΠC#(σSNAME=?WANG?(S∞SC)

6)检索全部学生都选修的课程的课程号与课程名。

∏C#,CNAME(C∞(πS#,C#(SC) ? πS#(S)))

7)检索选修课程包含LIU老师所授全部课程的学生学号。

∏S#,C#(SC)÷∏C#(σTEACHER=?LIU?(C)) 6.对于教学数据库的3个基本表

S(S#,SNAME,AGE,SEX) SC(S#,C#,CNAME)

C(C#,CNAME,TEACHER)试用关系代数表达式表示下列查询语句:

1) 检索LIU老师所授课程的课程号和课程名。

SELECT C#,CNAME FROM C WHERE TEACHER= ?LIU?;

2)检索年龄大于23岁的男学生的学号和姓名。

SELECT S#,SNAME FROM S WHERE AGE>23 AND SEX=?M?; 3)检索学号为S3学生所学课程的课程名与任课教师名。 SELECT CNAME,TEACHER FROM SC,C WHERE SC.C# =C.C# AND S#=?S3?;

4)检索至少选修LIU老师所授课程中一门课的女学生姓名。

连接查询方式

SELECT SNAME FORM S,SC,C

WHERE S.S# =SC.S# AND SC.C# =C.C# AND SEX=?F?AND TEACHER=?LIU?;

嵌套查询方式

SELECT SNAME FORM S WHERE SEX =?F?AND S# IN

(SELECT S# FORM SC WHERE C#

IN

(SELECT C# FORM C WHERE

TEACHER =?LIU?));

存在量词方式

SELECT SNAME FORM S WHERE SEX=?F?AND EXISTS

(SELECT * FORM SC WHERE SC.S#

29

=S.S# AND EXISTS

(SELECT * FORM C WHERE

C.C# =SC.C# AND TEACHER=?LIU?)); 5)检索WANG同学不学的课程的课程名。

SELECT C# FOME C WHERE NOT EXISTS

(SELECT * FORM S,SC WHERE S.S# =SC.S# AND SC.C# =C.C# AND SNAME=?WANG?); 6)检索至少选修两门课的学生学号。

SELECT DISTINCT X.S# FROM SC X, SC Y WHERE X.S#=Y.S# AND X.C#!=Y.C#;

7)检索全部学生都选修的课程的课程号与课程名。

SELECT C#,CNAME FROM C WHERE NOT EXISTS

(SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE S#=S.S# AND C#=C.C#));

用集合包含

SELECT C#,CNAME FROM C WHERE (SELECT S# FROM SC WHERE C# =C.C# )

CONTAINS

SELECT S# FROM S; 或

SELECT C#,CNAME FROM C WHERE NOT EXISTS

((SELECT S# FROM S) EXCEPT

(SELECT S# FROM SC WHERE C# =C.C#));

8)检索选修课程包含LIU老师所授课程的学生学号。

SELECT DISTINCT S# FROM SC X WHERE NOT EXISTS

(SELECT * FROM C WHERE TEACHER=?LIU?AND NOT EXISTS

(SELECT * FROM SC Y WHERE Y.S# =X.S# AND X.C#=C.C#));

或:SELECT DISTINCT S# FROM SC X WHERE NOT EXISTS

((SELECT C# FROM C WHERE TRACHER=?LIU?) EXCEPT

(SELECT C# FROM SC Y WHERE Y.S# =X.S#)); 7.试用SQL查询语句表达下列对上题中3个基本表S、SC、C的查询:

1)统计有学生选修的课程门数。

SELECT COUNT (DISTINCT C#) FROM SC; 2)求选修C4课程的女学生的平均年龄。

SELECT AVG(AGE) FROM S,SC WHERE S.S#=SC.S# AND C# =?C?AND SEX=?F?;

3)求LIU老师所授课程的每门课程的平均成绩。

SELECT C.C#,AVG(GRADE) FROM SC,C WHERE SC.C# =C.C# AND TEACHER=?LIU? GROUP BY C.C#;

4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

SELECT C# ,COUNT(S#) FROM SC GROUP BY C# HAVING COUNT(*)>10 ORDER BY 2 DESC,1;

5)检索学号比WANG同学大,而年龄比他小的学生姓名。

SELECT SNAME FROM S WHERE S#>ALL (SELECT S# S WHERE SNAME=?WANG?)

AND AGE

6)在表SC中检索成绩为空值的学生学号和课程号。 SELECT S#,C# FROM SC WHERE GRADE IS NULL;

7)检索姓名以L打头的所有学生的姓名和年龄。

SELECT SNAME,AGE FROM S WHERE SNAME LIKE ?L%?;

8)求年龄大于女同学平均年龄的男学生姓名和年龄。

SELECT SNAME,AGE FROM S WHERE SEX=?M?AND

AGE >(SELECT AVG(AGE) FROM S

WHERE SEX=?F?);

9)求年龄大于所有女同学年龄的男学生姓名和年龄。

SELECT SNAME,AGE FROM S WHERE SEX=?M?AND

AGE >ALL(SELECT AGE FROM S

WHERE SEX=?F?);

8.用SQL更新语句表达对上题教学数据库中关系S、SC、C作如下更新操作:

1)往关系C中插一个课程元组。

INSERT INTO C VALUES(?C8?,?VC++?,?BAO?); 2)SC中删除尚无成绩的选课元组。

DELETE FROM SC WHERE GRADE IS NULL; 3)把选修LIU老师课程的女同学选课元组全部删去。 DELETE FROM SC WHERE S# IN (SELECT S# FROM S WHERE SEX =?F?)

AND C# IN(SELECT C# FROM C WHERE TEACHER=?LIU?);

4)把MATHS课不及格的成绩全改为60分。 UPDATE SC SET GRADE = 60

WHERE GRADE<60 AND C# IN (SELECT C# FROM C WHERE CNAME=?MATHS?);

30

5)把低于所有课程总平均成绩的女同学成绩提高5%。 UPDATE SC SET GRADE = GRADE *1.05

WHERE S# IN(SELECT S# FROM S WHERE SEX=?F?)AND GRADE<(SELECT AVG(GRADE) FROM SC);

6)在表SC中修改C4课程的成绩,若成绩小于等于70分提高5%,若成绩大于70分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。 UPDATE SC SET GRADE=GRADE * 1.04 WHERE C#=?C4?AND GRADE>70;

UPDATE SC SET GRADE =GRADE * 1.05 WHERE C # =?C4?AND GRADE<=70; 7)在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。

UPDATE SC SET GRADE = GRADE * 1.05

WHERE GRADE<(SELECT AVG(GRADE) FROM SC);

9.设数据库中有3个关系:

职工表EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别和籍贯。

工作表WORKS(E#,C#,SALARY),其属性分别表示职工工号、工作的公司编号和工资。 公司表 COMP(C#,CNAME,CITY),其属性分别表示公司编号、公司名称和公司所在城市。

试用SQL语言写出下列操作:

1)检索超过50岁的男职工的工号和姓名。

SELECT E#,ENAME FROM EMP WHERE AGE>50 AND SEX=?M?;

2)假设每个职工只能在一个公司工作,检索工资超过1000元的男性职工工号和姓名。

SELECT EMP.E#,ENAME FROM EMP,WORKS WHERE EMP.E#=WORKS.E# AND SALARY>1000;

3)假设每个职工可在多个公司工作,检索在编号为C4和C8公司兼职的职工工号和姓名。 SELECT A.E#,A.ENAME FROM EMP A,WORKS B,WORKS C

WHERE A.E#=B.E# AND B.E#=C.E# AND B.C#=?C4?AND C.C#=?C8?;

4)检索在“联华公司”工作、工资超过1000元的男性职工的工号和姓名。

SELECT A.E#,A.ENAME FROM EMP A,WORKS B,COMP C

WHERE A.E#=B.E# AND B.C#=C.C# AND CNAME=?联华公司?

AND SALARY>1000 AND SEX=?M?;


数据库应用期末复习题及答案1(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:城市公交车载视频监控系统方案2 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: