数据库期末复习题 下载本文

企业中小型数据库系统开发期末复习题

选择、填空题参照课后习题中的题目。 三、简答题

1、DBS由哪几个部分组成?

数据库、数据库管理系统、数据库应用系统、数据库管理员

2.数据库的并发操作会带来数据不一致性有哪些问题?

丢失更新、不可重复读、脏读和幻读。

3.请叙述数据库设计的六个步骤。

(1)需求分析(2)概念设计(3)逻辑设计(4)物理设计(5)数

据库实施 (6)数据库运行和维护

4.数据库的完整性约束有哪三个?

实体完整性。 参照完整性 用户自定义完整性

5.请详细叙述三级封锁协议。

三级封锁协议在二级封锁协议的基础上,再规定S锁必须在事务T结束后才能释放。如果未获准加S锁,则该事务T进入等待状态,直到获准加X锁后该事务才继续执行。

三级封锁协议除了能防止丢失修改和读“脏”数据的问题之外,还能解决不可重复读的问题。但是带来了其它问题:死锁和活锁。

6.数据库技术的发展经历了哪三个阶段?

人工管理阶段,文件系统阶段,数据库系统阶段。

四、本题用到下面三个关系表:

CARD 借书卡: CNO 卡号,NAME 姓名,CLASS 班级

BOOKS 图书: BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数

BORROW 借书记录:CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。

要求用SQL语句实现下列题目:

1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。

create table borrow (

cno int not null foreign key references card(cno), bno int not null foreign key references books(bno), rdate datetime,

primary key(cno,bno)) )

2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。

SELECT CNO,借图书册数=COUNT(*) FROM BORROW GROUP BY CNO HAVING COUNT(*)>5

3. 查询借阅了\水浒\一书的读者,输出姓名及班级。

select cname,class from card

where cno in (

select cno from borrow where bno=(select bno from books where bname ='水浒') )

4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。

select * from borrow where rdate

5. 查询书名包括\网络\关键词的图书,输出书号、书名、作者。

select bno,bname,author from books

where bname like '%网络%'

6. 查询现有图书中价格最高的图书,输出书名及作者。

select bname,author from books

where price in (select max(price) from books)

7. 查询当前借了\计算方法\但没有借\计算方法习题集\的读者,输出其借书卡号,并按卡号降序排序输出。

8. 将\班同学所借图书的还期都延长一周。

update borrow set rdate=dateadd(dd,7,rdate);

UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE) FROM CARD a,BORROW b WHERE a.CNO=b.CNO

AND a.CLASS=N'C01'

9. 从BOOKS表中删除当前无人借阅的图书记录。

10.建立一个视图,显示\力01\班学生的借书信息(只要求显示姓名和书名)。 11.查询当前同时借有\计算方法\和\组合数学\两本书的读者,输出其借书卡号,并按卡号升序排序输出。

12.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。 13.对CARD表做如下修改:

a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。 b. 为该表增加1列NAME(系名),可变长,最大20个字符。

14.创建一个触发器,要求库存册数在输入时不能为负数,如果为负数则取消操作。

五、现有图书借阅关系数据库如下:

图书(图书号、书名,作者,单价,库存量) 读者(读者号,姓名,工作单位,地址) 借阅(图书号,读者号,借期,还期,备注) 其中:还期为NULL表示该书未还。 用关系代数表达式实现下列1-4小题:

1、检索读者号为R016的读者姓名、工作单位;

select 姓名,工作单位from 读者where 读者号='R016'

2、检索借阅图书号为B5的读者姓名;

select 姓名from 读者

where 读者号in (select 读者号from 借阅where 图书号='B5')

3、检索读者“李林”所借图书的书名;

select 图书.书名from 图书,读者,借阅where 读者.姓名='李林'and 读者.读者号=借阅.读者号and 借阅.读书号=图书.图书号

4、检索读者“李林”所借图书中未还的书名;

select 图书.书名from 图书,读者,借阅where 读者.姓名='李林' and 还期is null and