一、实验目的
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个月,如果超过给出相应提示(“图书借阅期限最长为3个月”),不超过给出相应提示(“插入记录成功”或“修改记录成功”)。对“借阅信息表”进行插入或修改操作,验证触发器的执行情况。
2、使用SQL语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当“图书信息表”中插入或修改记录时,触发该触发器,检查库存册数是否大于0,若不大于0,则撤销插入和修改操作。在“图书信息表”中插入或修改一条记录,给定的库存册数值为-1,验证触发器的执行情况。(选做)
3、使用SQL语言删除“借阅信息插入修改_TRIG”触发器。
三、实验步骤
约束的创建和管理:
1、使用SQL语句创建图书表(tb_booknew),要求为各字段选择合适的数据类型及名称,其中“图书编号”字段为主码;“类别编号”字段为外码,删除图书类别信息表中记录时级联的删除图书表中对应的记录;书名不允许空值;库存数限制在25到100之间。
create table tb_booknew
( Bno char(5) PRIMARY KEY, --图书编号
Cno char(1), --类别编号
Bname char(20) NOT NULL, --书名
Author char(10), --作者
Press char(20), --出版社
Price float, --定价
Sq int, --库存数量
FOREIGN KEY(Cno) REFERENCES tb_booktype(Cno) ON DELETE CASCADE,
CHECK (Sq>=25 AND Sq<=100)
2、使用SQL语句创建借阅表(tb_borrownew),要求为各字段选择合适的数据类型及名称,其中“图书编号”、“读者编号”和“借阅日期”的组合值为主码。
create table tb_borrownew
( Bno char(5), --图书编号
Rno char(6), --读者编号
Bodate date, --借阅日期
Rdate date, --归还日期
Primary KEY(Bno,Rno,Bodate)
);
3、使用SQL语句为图书表(tb_booknew)中书名字段增加唯一性约束。
ALTER TABLE tb_booknew ADD Constraint C1 UNIQUE (Bname)
4、使用SQL语句将第1题的库存数限制修改为30到80之间。
ALTER TABLE tb_booknew ADD CONSTRAINT Sq CHECK(Sq>=30 AND Sq<=100)
5、使用SQL语句删除第3题增加的约束。
ALTER TABLE tb_booknew DROP Constraint C1
触发器的创建和管理:
1、使用SQL语句创建一个名为“借阅信息插入修改_TRIG”的触发器,要求在“借阅信息表”中插入或修改记录时触发该触发器,检查“归还日期”字段修改是否超过3个月,如果超过给出相应提示(“图书借阅期限最长为3个月”),不超过给出相应提示(“插入记录成功”或“修改记录成功”)。对“借阅信息表”进行插入或修改操作,验证触发器的执行情况。
CREATE TRIGGER 借阅信息插入修改_TRIG ON tb_borow instead of INSERT,UPDATE
AS
begin
declare @newrdate date,@newbdate date,@month int
select @newrdate = Rdate from inserted
select @newbdate = Bodate from inserted
select @month = DATEDIFF(m,@newbdate,@newrdate)
if (@month>3) print('图书借阅期限最长为3个月')
else if exists(select * from deleted)
print('修改记录成功')
else print('插入记录成功')
end
insert into tb_borow values ('1','2','2222-2-2','3333-3-3')
2、使用SQL语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当“图书信息表”中插入或修改记录时,触发该触发器,检查库存册数是否大于0,若不大于0,则撤销插入和修改操作。在“图书信息表”中插入或修改一条记录,给定的库存册数值为-1,验证触发器的执行情况。(选做)
3、使用SQL语言删除“借阅信息插入修改_TRIG”触发器。
DROP TRIGGER 借阅信息插入修改_TRIG
本实验是学习中的记录,不足之出,望指出!!!