实验六 数据库的完整性控制
一、实验目的
(1)、理解SQL Server的实体完整性、参照完整性和用户自定义的完整性。
(2)、掌握SQL Server中实体完整性的建立,实践违反实体完整性的结果。
(3)、掌握使用外键以及利用foreign key.... references子句以及各种约束保证参照完整性的方法。
(4)、掌握用户自定义约束、实践用户自定义完整性。
(5)、了解触发器的作用以及一般的用法,掌握定义的触发器。
二、实验内容与步骤
(1)、创建任意名称的数据库,其中至少包括教师及研究生表,创建教师表的定义触发器trig_teachecrscore,要求记录的职称必须是教授或副教授。
1)创建导师情况表professor。
create table professor(
pno char(6) not null, --导师编号
pname char(8) not null, --姓名
psex char(2), --性别
page smallint, --年龄
scores char(6), --职称
phone char(8), --电话号码
primary key(pno));
2)创建研究生表students。
create table students(
sno char(6) not null, --学号
sname char(8) not null, --姓名
ssex char(2), --性别
enter_date datetime, --入学年份
scores decimal(5,2), --总分
course char(20), --研究方向
pno char(3), --导师编号
primary key(sno),
foreign key(pno) references professor(pno));
自行加入数据。
创建触发器如下:
create trigger trig_teacherscore on professor for insert
as
if((select scores from inserted)not in('教授','副教授'))
begin
print'插入的职称必须为教授或副教授'
rollback transaction
end
(2)、为研究生表创建更新触发器trig_stupdf,要求当更新一个记录时,新的记录的总分不低于原来的总分。
create trigger trig_stupdt on students for update
as
if((select scores from inserted)<(select scores from deleted))
begin
print'新插入的数据不得低于原数据'
rollback transaction
end
(3)、为教师表创建一个删除触发器trig_tchedl,要求当删除表中的教师编号为101时,拒绝删除。
create trigger trig_tchdel on professor for delete
as
if((select pno from deleted)='p101')
begin
print'拒绝删除编号为p101的记录'
rollback transaction
end
(4)、执行代码,验证上述触发器的约束。
delete from professor where pno='p101' --验证删除触发器
insert into professor values('p102','罗惠萍','男',35,'教授','45678945')
insert into professor values('p103','陈玲','女',40,'研究生','45612385') --验证插入触发器
update students set scores=350 where sno='s002'
update students set scores=200 where sno='s001' --验证更改触发器
(5)、删除触发器trig_tchdel。
drop trigger trig_tchdel