数据库完整性管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北华航天工业学院《数据库原理与应用》
实验报告
报告题目:数据库完整性管理
作者所在系部:计算机科学与工程系
作者所在专业:网络工程
作者学号:20114052203
作者姓名:郭豪
指导教师姓名:李建义
完成时间:2013.05.10
北华航天工业学院教务处制
数据库完整性管理
一、实验目的
1、理解数据库完整性约束机制;
2、掌握创建、修改和删除完整性约束的方法;
3、掌握创建和删除触发器的方法。

二、实验内容
(一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。

(二)约束的创建和管理
1、使用SQL语句创建图书表(tb_booknew),要求为各字段选择合适的数据类型及名称,其中“图书编号”字段为主码;“类别编号”字段为外码,删除图书类别信息表中记录时级联删除图书信息表中对应的记录;书名不允许空值;库存数限制的25到100之间。

2、使用SQL语句创建借阅表(tb_borrownew),要求为各字段选择合适的数据类型及名称,其中“图书编号”和“读者编号”的组合值为主码。

3、使用SQL语句为图书表(tb_booknew)中书名字段增加唯一性约束。

4、使用SQL语句将第1题的库存数限制修改为30到80之间。

5、使用SQL语句删除第3题增加的约束。

(三)触发器的创建和管理
1、使用SQL语句创建一个名为“借阅信息插入修改_TRIG”的触发器,要求在“借阅信息表”中插入或修改记录时触发该触发器,检查“归还日期”字段修改是否超过3个月,如果超过给出相应提示,不超过给出相应提示(“插入记录成功”或“修改记录成功”)。

对“借阅信息表”进行插入或修改操作,验证触发器的执行情况。

2、使用SQL语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当“图书信息表”中插入或修改记录时,触发该触发器,检查库存册数是否大于0,若不大于0,则撤销插入和修改操作。

在“借阅信息表”中插入或修改一条记录,给定的库存册数值为-1,验证触发器的执行情况
3、使用SQL语言删除“借阅信息插入修改_TRIG”触发器。

三、实验步骤
(一)附加过程略,
(二)
1,创建表tb_booknew,代码及截图
create table tb_booknew
(
book_no char(10),
booktype_no int,
book_name char(20)not null,
book_writer char(10),
book_stock int
constraint C1check(book_stock between 25 and 100),
primary key (book_no),
foreign key (booktype_no)references
db_library.dbo.tb_booktype(类别编号)
on delete cascade
)
2,创建tb_borrownew代码及截图。

create table tb_borrownew
(
tb_reader_no char(10),
tb_book_no char(10),
tb_borrow_date date,
tb_back_date date,
primary key (tb_reader_no,tb_book_no)
)
3,给tb_booknew书名增加唯一性约束代码及截图
alter table tb_booknew
add constraint c2unique(book_name)
4,修改tb_booknew 的库存数在30—80之间。

alter table tb_booknew
drop constraint C1
alter table tb_booknew
add constraint C1check(book_stock between 30 and 80)
5,、使用SQL语句删除第3题增加的约束。

alter table tb_booknew
drop constraint c2
(三)
(1)创建触发器借阅信息插入修改_TRIG
create trigger借阅信息插入修改_TRIG
on dbo.tb_borrow
for insert,update
as
declare
@借阅日期date,
@归还日期date
begin
select@借阅日期=借阅日期,@归还日期=归还日期from inserted
if(DATEDIFF(M,@借阅日期,@归还日期)>3)
begin
print('该借阅记录已经超过三个月!!!');
end
else
if (exists(select*from inserted)and not exists(select*from deleted))
begin
print('插入成功!!!');
end
if exists(select*from inserted)and exists(select*from deleted)
begin
print('修改成功!!!');
end
end
go
验证1:
insert
into tb_borrow(图书编号,读者编号,借阅日期,归还日期)
values(10002,'R10003','2012-3-3','2012-4-4')
go
验证2
update tb_borrow
set归还日期='2012-3-20'
where图书编号=10002 and读者编号='R10003'and借阅日期='2012-3-3'
go
验证3:
insert
into tb_borrow(图书编号,读者编号,借阅日期,归还日期) values(10002,'R10003','2012-3-3','2013-4-4')
go
(2)
创建触发器代码及截图:
use db_Library
go
create trigger图书信息_TRIG-----------创建图书信息触发器
on tb_book
for insert,update
as
declare
@库存数int
begin
select@库存数=库存数from inserted
while(@库存数<=0)
begin
print('库存数小于等于,插入更新操作已停止!!!!');
break
end
while(@库存数>0)
begin
if (exists(select*from inserted)and not exists
(select*from deleted))
begin
print('插入成功!!!');
break
end
if exists(select*from inserted)and exists (select*from deleted)
begin
print('修改成功!!!');
break
end
end
end
go
go
验证代码及截图:
insert
into tb_book(书名,作者,出版社,库存数)
values('数据库h','aaaaaaa','fdfdffd',-1)
go
(3),drop trigger借阅信息插入修改_TRIG
四,实验总结
有关于数据库实验的心得体会,总的来说,受益匪浅。

在这些天中,我们学到了很多东西,包括建表,导入数据,查询,插入,以及文件的隔离、添加。

SQL Server数据库的实验学习使我对数据库的有了新的进步,我感谢数据库老师给了我有用的知识,以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。

希望在今后中,SQL Server能给我更多帮助。

感谢学校开设这样一门优秀使用的课程,让我对数据库有了更深的了解。

相关文档
最新文档