企业中小型数据库系统开发期末复习题
选择、填空题参照课后习题中的题目。 三、简答题
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