数据库原理及应用试题

数据库原理及应用试题,第1张

1.B 2.C 3.B 4.C 5.D 6.C 7.C 8.D 9.C 10.A

11.A 12.A 13.A --不太确定 14.B 15.C 16.A 17.B 18.A 19.D 20.C

1.试述事务的概念及事务的四个特性。

答:

事务是用户定义的一个数据库 *** 作序列,这些 *** 作要么全做要么全不做,是一个不可分割的工作单位。

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。

原子性:事务是数据库的逻辑工作单位,事务中包括的诸 *** 作要么都做,要么都不做。

一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的 *** 作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

持续性:持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他 *** 作或故障不应该对其执行结果有任何影响。

2.为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。

答:

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

例如某工厂的库存管理系统中,要把数量为Q的某种零件从仓库1移到仓库2存放。

则可以定义一个事务T,T包括两个 *** 作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常终止时只做了第一个 *** 作,则数据库就处于不一致性状态,库存量无缘无故少了Q。

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

答:

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

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

4.数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?

答:数据库系统中可能发生各种各样的故障,大致可以分以下几类:

(1)事务内部的故障;

(2)系统故障;

(3)介质故障;

(4)计算机病毒。

事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据

库数据。

5.据库恢复的基本技术有哪些?

答:

数据转储和登录日志文件是数据库恢复的基本技术。

当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。

6. 数据库转储的意义是什么? 试比较各种数据转储方法。

答:

数据转储是数据库恢复中采用的基本技术。所谓转储即DBA定期地将数据库复制到磁带或另一个磁盘上保存起来的过程。当数据库遭到破坏后可以将后备副本重新装入,将数据库恢复到转储时的状态。

静态转储:在系统中无运行事务时进行的转储 *** 作。静态转储简单,但必须等待正运行的用户事务结束才能进行。同样,新的事务必须等待转储结束才能执行。显然,这会降低数据库的可用性。

动态转储:指转储期间允许对数据库进行存取或修改。动态转储可克服静态转储的缺点,它不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是,转储结束时后援副本上的数据并不能保证正确有效。因为转储期间运行的事务可能修改了某些数据,使得后援副本上的数据不是数据库的一致版本。

为此,必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件(log file)。这样,后援副本加上日志文件就能得到数据库某一时刻的正确状态。

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

海量转储是指每次转储全部数据库。增量转储则指每次只转储上一次转储后更新过的数据。从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来更简单些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。

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

答:

(1)日志文件是用来记录事务对数据库的更新 *** 作的文件。

(2)设立日志文件的目的是: 进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。

8. 登记日志文件时为什么必须先写日志文件,后写数据库?

答:

把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的 *** 作。有可能在这两个 *** 作之间发生故障,即这两个写 *** 作只完成了一个。

如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO *** 作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。

9. 针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)

答:

事务故障的恢复:

事务故障的恢复是由DBMS自动完成的,对用户是透明的。

DBMS执行恢复步骤是:

(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新 *** 作。

(2)对该事务的更新 *** 作执行逆 *** 作。即将日志记录中“更新前的值”写入数据库。

(3)继续反向扫描日志文件,做同样处理。

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

答:

系统故障的恢复:

系统故障可能会造成数据库处于不一致状态:

一是未完成事务对数据库的更新可能已写入数据库;

二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。

因此恢复 *** 作就是要撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。

系统的恢复步骤是:

(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。

(2)对撤销队列中的各个事务进行UNDO处理。

进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新 *** 作执行逆 *** 作,即将日志记录中“更新前的值”(Before Image)写入数据库。

(3)对重做队列中的各个事务进行REDO处理。

进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的 *** 作。即将日志记录中“更新后的值”(After Image)写入数据库。

*解析:

在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。

下面给出一个算法:

1) 建立两个事务队列:

· UNDO-LIST: 需要执行undo *** 作的事务集合;

· REDO-LIST: 需要执行redo *** 作的事务集合;

两个事务队列初始均为空。

2) 从日志文件头开始,正向扫描日志文件

· 如有新开始(遇到Begin Transaction)的事务Ti,把Ti暂时放入UNDO-LIST队列;

· 如有提交的事务(遇到End Transaction)Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列;

直到日志文件结束

答:

介质故障的恢复:

介质故障是最严重的一种故障。

恢复方法是重装数据库,然后重做已完成的事务。具体过程是:

(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。

(2)DBA装入转储结束时刻的日志文件副本

(3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。

*解析

1)我们假定采用的是静态转储,因此第(1)步装入数据库后备副本便可以了。

2)如果采用的是静动态转储,第(1)步装入数据库后备副本还不够,还需同时装入转储开始时刻的日志文件副本,经过处理后才能得到正确的数据库后备副本。

3)第(2)步重做已完成的事务的算法是:

a. 正向扫描日志文件,找出故障发生前已提交的事务的标识,将其记入重做队列

b. 再一次正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。

10. 具有检查点的恢复技术有什么优点?

答:

利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO,哪些事务需要UNDO。一般来说,需要检查所有日志记录。这样做有两个问题:

一是搜索整个日志将耗费大量的时间。

二是很多需要REDO处理的事务实际上已经将它们的更新 *** 作结果写到数据库中了,恢复子系统又重新执行了这些 *** 作,浪费了大量时间。

检查点技术就是为了解决这些问题。

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

答:

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

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

这里建立两个事务队列:

· UNDO-LIST: 需要执行undo *** 作的事务集合;

· REDO-LIST: 需要执行redo *** 作的事务集合;

把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。

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

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

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

④ 对UNDO-LIST中的每个事务执行UNDO *** 作, 对REDO-LIST中的每个事务执行REDO *** 作。

12. 什么是数据库镜像?它有什么用途?

答:

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

数据库镜像的用途有:

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

二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

一、不定项选择题(共40题,每小题2.5分,总分100分)

1. 数据库管理系统的发展历经了如下那些模型阶段( ACDE )

A. 层次模型 B. 结构模型 C. 关系模型

D. 网状模型 E.对象模型

2. 关系型数据库的核心单元是(B)

A. 对象B. 表

C. 行 D. 列

3. 对于关系型数据库来说,表之间存在下面那些关系( ABC )

A. 一对一关系 B. 一对多关系

C. 多对多关系 D. 继承关系

4. 在SQL中,下面对于数据定义语言(DDL)描述正确的是( D )。

A. DDL关心的是数据库中的数据 B. 完成数据的增、删、改、查 *** 作

C. 控制对数据库的访问D. 定义数据库的结构

5. MySQL是一种(C)数据库管理系统。

A. 层次型 B. 网络型C. 关系型 D. 对象型

6. SQL中,下列 *** 作有语法错误的是( B )

A. AGE IS NOT NULL B. NOT(AGE IS NULL)

C. SNAME=‘王五’D. SNAME=‘王%’

7. SQL中,下列关于创建、管理数据库的 *** 作语句不正确的是( CDE )

A. CREATE DATABASE InstantB. USE Instant C. NEW DATABASE Instant

D. Connection InstantE. Delete DATEBASE Instant

8. 在MySQL中,不存在的数据类型是(F)。

A. INT B. TEXT C. DECIMAL

D. VARCHAR E. DATETIME F. VARCHAR2

9. 在MySQL中,下列关于创建数据库表的描述正确的是( C )。

A. 在创建表时必须设定列的约束

B. 在删除表的时候通过外键约束连接在一起的表会被一同删除

C. 在创建表时必须设置列类型

D. 通过CREATE TABLE new_t SELECT * FROM old_t复制表的同时,表的约束能够一起被复制到新表中

10. 根据数据完整性实施的方法,可以将其分为( ACDF )

A. 实体完整性 B. 表完整性 C.域完整性

D. 引用完整性 E. 记录完整性F.用户自定义完整性

11. 下面关于域完整性的方法,不正确的是( A )。

A. 主键约束B. 外键约束C.检查约束

D. 非空约束E. 默认值

12. 下面关于创建和管理索引正确的描述是( C )。

A. 创建索引是为了便于全表扫描

B. 索引会加快DELETE、UPDATE和INSERT语句的执行速度

C. 索引被用于快速找到想要的记录

D. 大量使用索引可以提高数据库的整体性能

13. SQL中,“AGE IN(20,22)”的语义是( D )。

A. AGE<=22 AND AGE >=20 B. AGE <22 AND AGE >20

C. AGE =20 AND AGE =22D. AGE =20 OR AGE =22

14. 有一个关系:学生(学号,姓名,系别),规定学号的值域是8个数字组成的字符串,这一规则属于(C)

A. 实体完整性约束B. 参照完整性约束

C. 用户自定义完整性约束 D. 关键字完整性约束

15. 下面SQL是来源于考试成绩表t_exam:学号stuId、科目编号subId、成绩score,考试日期:ex_date。有以下sql,它表示的意思是:( B )

Select stu_id,subId,count(*) as x

From t_exam

Where ex_date=’2008-08-08’

Group stu_id,subId

Having count(*)>1

Order by x desc

A. 找出’2008-08-08’这天某科考试2次及以上的学生记录

B. 找出’2008-08-08’这天,某科考试2次及以上的学生记录,考试次数多的放在前面

C. 找出’2008-08-08’这天,某科考试2次及以上的学生记录,考试次数少的放在前面

D. 根据学号和学科分组,找出每个人考试科数,最后考试次数多的放在前面

16. EMP表如下所示,下面哪些SQL语句的返回值为3:( BD )

EMP

雇员号 雇员名 部门号 工资 

001  张山  02 2000

010  王宏达 01 1200

056  马林生 02 1000

101  赵敏04

A. select count(*) from emp

B. select count(distinct 部门号) from emp

C. select count(*) from emp group by 雇员号

D. select count(工资) from emp

17. 下面那一项不是SELECT语句对数据的 *** 作:(D)

A. 投影B. 联接C. 并 D. 级联

18. 下面关于SQL数据查询 *** 作描述正确的有:( ABD )

A. 投影 *** 作是选择对表中的哪些列进行查询 *** 作

B. 使用DISTINCT关键字可以过滤查询中重复的记录

C. 在模糊查询中,通配符“%”表示匹配单个字符,而“_”表示匹配零个或多个字符

D. 在MySQL中使用LIMIT关键字限制从数据库中返回记录的行数

19. 在SQL语言中,条件“BETWEEN 20 AND 30”表示年龄在20到30之间,且( A )。

A. 包括20岁和30岁B. 不包括20岁和30岁

C. 包括20岁,不包括30岁 D. 不包括20岁,包括30岁

20. SQL语言中,删除EMP表中全部数据的命令正确的是(C)。

A. delete * from emp B. drop table emp

C. truncate table emp D. 没有正确答案

21. 有关索引的说法错误的是( AD )

A. 索引的目的是为增加数据 *** 作的速度

B. 索引是数据库内部使用的对象

C. 索引建立得太多,会降低数据增加删除修改速度

D. 只能为一个字段建立索引

22. 下列哪个关键字在Select语句中表示所有列( A )

A. * B. ALL C. DESC D. DISTINCT

23. 在表中设置外键实现的是哪一类数据完整性( B )

A. 实体完整性 B. 引用完整性

C. 用户定义的完整性 D. 实体完整性、引用完整性和用户定义的完整性

24. 下面正确表示Employees表中有多少非NULL的Region列的SQL语句是( B )

A. SELECT count(* ) from Employees

B. SELECT count(ALL Region) from Employees

C. SELECT count(Distinct Region) from Employees

D. SELECT sum(ALL Region) from Employees

25. 下面可以通过聚合函数的结果来过滤查询结果集的SQL子句是(C)

A. WHERE子句 B. GROUP BY子句

C. HAVING 子句 D. ORDER BY子句

26. t_score(stu_id,sub_id,score),即成绩表(学号,科目编号,成绩)。学生如果某科没有考试,则该科成绩录入null。能够获取各位学生的平均成绩的选项是( A )

A. select avg(nvl(socre,0)) from score group by stu_id

B. select stu_id,avg(sorce) from score

C. select stu_id,avg(score) from score

D. select stu_id,sum(score)/count(score) from score

27. 若要求查找S表中,姓名的第一个字为'王'的学生学号和姓名。下面列出的SQL语句中,哪个是正确的(B)

A. SELECT Sno,SNAME FROM S WHERE SNAME=′王%′

B. SELECT Sno,SNAME FROM S WHERE SNAME LIKE′王%′

C. SELECT Sno,SNAME FROM S WHERE SNAME LIKE′王_′

D. 全部

28. 若要求“查询选修了3门以上课程的学生的学生号”,正确的SQL语句是( B )

A. SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*)>3

B. SELECT Sno FROM SC GROUP BY Sno HAVING( COUNT(*)>3)

C. SELECT Sno FROM SC ORDER BY Sno WHERE COUNT(*)>3

D. SELECT Sno FROM SC ORDER BY Sno HAVING COUNT(*)>= 3

29. 对下面的查询语句描述正确的是(D)

Select StudentID,Name,

(select count(*) from StudentExam

where StudentExam.StudentID = Student.StudentID) as ExamsTaken

from Student

order by ExamsTaken desc

A. 从Student表中查找StudentID和Name,并按照升序排列

B. 从Student表中查找StudentID和Name,并按照降序排列

C. 从Student表中查找StudentID、Name和考试次数

D. 从Student表中查找StudentID、Name,并从StudentExam表中查找与StudentID一致的学生考试次数,并按照降序排列

30. 下面题基于学生-课程数据库中的三个基本表:

学生信息表:s(sno, sname, sex, age, dept) 主键为sno

课程信息表:c(cno, cname, teacher) 主键为cno

学生选课信息表:sc(sno, cno, grade) 主键为(sno, cno)

“从学生选课信息表中找出无成绩的学生信息”的SQL语句是( C d)

A.

SELECT * FROM sc WHERE grade=NULL

B.

SELECT * FROM sc WHERE grade IS ‘ ’

C.

SELECT * FROM sc WHERE grade IS NULL

D.

SELECT * FROM sc WHERE grade =‘ ’

31. 当子查询返回多行时,可以采用的解决办法是( C )。

A. 使用聚合函数 B. Where条件判断

C. 使用IN运算符D. 使用Group by进行分组

32. 下面关于在子查询中使用运算符描述不正确的是( D )。

A. 使用IN运算符用于查找字段值属于某一组值的行

B. 使用Exists运算符用于测试子查询是否返回行,如果返回其值就为真

C. 使用ALL运算符用于测试子查询结果集的所有行是否满足指定的条件

D. 使用Any运算符用于测试子查询结果集中的一行或多行不满足指定的条件

33. 下面关于组合查询描述不正确的是(D )。

A. 从一个表中获取的数据必须和其它表中的数据具有相同的列数

B. 两个表中相对应的列必须具有相同的数据类型

C. UNION的结果集列名与第一个SELECT语句的结果集中的列名相同

D. UNION的结果集列名与第二个SELECT语句的结果集中的列名相同

E. UNION ALL运算符返回每个数据集的所有成员

34. 下面关于联接的描述正确的是(A)。

A. 内联接使用比较运算符根据每个表共有的列值来匹配两个表中的行

B. 左外联接结果集包含从右边的表返回的所有行

C. 右外联接结果集包含从左边的表返回的所有行

D. 全外联接返回左表和右表中的所有匹配的行

35. 下面关于数据库设计过程正确的顺序描述是( C )。

A. 需求收集和分析、逻辑设计、物理设计、概念设计

B. 概念设计、需求收集和分析、逻辑设计、物理设计

C. 需求收集和分析、概念设计、逻辑设计、物理设计

D. 需求收集和分析、概念设计、物理设计、逻辑设计

36. ER图属于下面哪一种数据库设计模型( B )。

A. 物理数据模型

B. 概念数据模型

C. 逻辑数据模型

D. 需求模型

37. 非主键必须完全依赖于主键列,这属于下列范式的内容( BC )

A. 1NFB. 2NF C. 3NFD. 都没有的

38. 如果一个字段的数据必须来源另一个表的主键,那么要在这个字段上建立( B )。

A. PK(主键) B. FK(外键) C. UK(唯一键) D. 复合主键

39. 根据三个范式的定义,下面哪个选项的设计是正确的( C )

职工编号姓名工种车间车间主任

1001 李宁车工一车间 周杰

1002 王海铣工一车间 周杰

1003 赵亮钳工二车间 吴明

1001 李宁钳工二车间 吴明

A. 员工表、工种表、车间表

B. 员工表、工种表、车间表、车间主任表

C. 员工表、工种表、车间表、员工工种表、员工车间表

D. 以上设计均不正确

40. 下列说法中,哪些是正确的( BD )

A. RDBMS是数据库管理系统的简称

B. 各行记录都不能重复,是第二范式要求的

C. 在数据库设计中一定要满足第三范式

D. 索引越多,查询越快,数据更新越慢


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9364625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存