数据库完整性管理实验

一、 实验目的

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”触发器。

go
create table tb_booknew
(
图书编号 int primary key,
类别编号 int,
书名 varchar(20) not null,
作者 varchar(20),
出版社 varchar(20),
定价 float,
库存数 int check(库存数 between 25 and 100)
foreign key (类别编号) references tb_booktype(类别编号)
on delete cascade
)

go 
create table tb_borrownew
(
图书编号 varchar(20),
读者编号 varchar(20),
借阅日期 date,
归还日期 date,
primary key(图书编号,读者编号)
)

alter table tb_booknew add constraint c unique(书名)

alter table tb_booknew add constraint c2 check(库存数 between 30 and 80)

alter table tb_booknew drop constraint c

alter table tb_booknew drop constraint c2,c3
go
insert into dbo.tb_booknew values(10001,3,'数据库管理','王珊','高等教育出版社',35.50,10)
insert into dbo.tb_booknew values(10002,3,'软件测试','贺平','机械工业出版社',24.60,5)
insert into dbo.tb_booknew values(10003,3,'c++程序设计','谭浩强','清华大学出版社',30.00,8)
insert into dbo.tb_booknew values(10004,4,'红楼梦','曹雪芹','人民文学出版社',70.00,5)
insert into dbo.tb_booknew values(10005,4,'西游记','罗贯中','人民文学出版社',60.00,8)
insert into dbo.tb_booknew values(10006,4,'红与黑','司汤达','人民文学出版社',50.00,5)
insert into dbo.tb_booknew values(10007,1,'高等数学','李翼','清华大学出版社',28.00,4)
insert into dbo.tb_booknew values(10008,8,'有机化学','张翔','高等教育出版社',29.00,5)
insert into dbo.tb_booknew values(10009,2,'大学英语','王琳','高等教育出版社',25.00,10)
insert into dbo.tb_booknew values(10010,2,'英语教程','王琳','高等教育出版社',25.00,5)

go 
insert into dbo.tb_borrownew values(10002,'R10003','2014-09-20','2014-10-20')
insert into dbo.tb_borrownew values(10003,'R10003','2014-09-20','2014-10-20')
insert into dbo.tb_borrownew values(10004,'R10003','2014-09-30','2014-10-30')
insert into dbo.tb_borrownew values(10009,'R10003','2014-09-30','2014-10-30')
insert into dbo.tb_borrownew values(10009,'R10007','2014-05-20','2014-06-20')
insert into dbo.tb_borrownew values(10010,'R10007','2014-05-20','2014-06-20')
insert into dbo.tb_borrownew values(10009,'R10009','2014-05-30','2014-06-30')
insert into dbo.tb_borrownew values(10010,'R10009','2014-05-22','2014-06-22')
insert into dbo.tb_borrownew values(10002,'R10009','2014-05-22','2014-06-22')
insert into dbo.tb_borrownew values(10003,'R10009','2014-05-30','2014-06-30')
go

--1、使用 SQL 语句创建一个名为“借阅信息插入修改_TRIG”的触发器,要求在“借阅信息表” 
--中插入或修改记录时触发该触发器,检查“归还日期”字段修改是否超过 3 个月,如果超过给出相 
--应提示,不超过给出相应提示(“插入记录成功”或“修改记录成功”)。对“借阅信息表”进行插入 
--或修改操作,验证触发器的执行情况。 
create trigger 借阅信息插入修改_TRIG
on tb_borrownew after
insert,update
as
begin
declare @归还日期 date
declare @借阅日期 date
select @归还日期=归还日期,@借阅日期=借阅日期 from inserted
if(DATEDIFF(M,@借阅日期,@归还日期)>3)
begin print('数据插入失败'); end
else
begin 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
end

insert into tb_borrownew values('10010','R10011','2014-04-22','2014-09-22')

insert into tb_borrownew values('10011','R10013','2014-04-22','2014-05-22')

update tb_borrownew set 归还日期='2014-06-22' where 读者编号='R10013'


--2、使用 SQL 语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当“图书信息表”中 插入或修改记录时,
--触发该触发器,检查库存册数是否大于 0,若不大于 0,则撤销插入和修改操作。
--在“借阅信息表”中插入或修改一条记录,给定的库存册数值为-1,验证触发器的执行情况 
go
create trigger 图书信息_TRIG
on tb_booknew
after insert,update
as
begin
declare @库存数 int
select @库存数=库存数 from inserted
if @库存数<0
begin print'库存数小于0' rollback end
else if @库存数>0
begin   print('数据插入成功')end
end

insert into tb_booknew values('10011','2','英语语法','何','华出版社',23.5,-1);
insert into tb_booknew values('10011','2','英语语法','何','华出版社',23.5,8);

drop trigger 借阅信息插入修改_TRIG
 

数据库完整性实验实验完整代码 打开ScoreDB数据库,完成以下操作: (1)分别定义ScoreDB数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束; (2)往student表插入一条跟已有的学号相同的学生数据,验证实体完整性约束; (3)向score表中插入一条数据,其中数据中的课程编号是课程表中没有的,验证参照完整性约束; (4)修改score表中一条数据的课程编号,该编号是课程表中没有的,验证参照完整性约束; (5)删除student表中的一条数据(其中学号出现在score表中),验证参照完整性约束。 (6)增加score表的约束条件,要求成绩在0-100之间。增加student表的约束条件,要求性别只允许取“男”或“女”。 (7)创建一个触发器student_update,实现功能:如果在学生表中修改了学号,则自动修改成绩表中的学号。 (8)创建一个级联删除触发器student_delete。要求:当从学生表中删除某学生信息时,同时删除score表中此学生相关的选课记录。 (9)创建一个触发器student_insert,实现功能:如果往学生表中插入数据,则自动修改班级表中的班级人数classNum。(如果改为删除数据,代码要怎么改?) (10)建立一个触发器course_check,每当删除课程表中记录时,先检查此课程是否已被选修,如选修则不允许删除,且给出提示信息“此课程已有学生选修,无法删除!”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

䔴䔴䔴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值