文档详情

实验七 触发器.docx

发布:2025-05-10约5.03千字共17页下载文档
文本预览下载声明

实验七触发器

一、实验目得

(1)理解触发器得用途、类型和工作原理

(2)掌握利用T-SQL语句创建和维护触发器得方法

(3)掌握利用企业管理器创建、维护触发器得方法

二、实验内容

1、创建after触发器

(1)创建一个在插入时触发得触发器sc_insert,当向sc表插入数据时,须确保插入得学号已在Student表中存在,并且还须确保插入得课程号在Course表中存在;若不存在,则给出相应得提示信息,并取消插入操作,提示信息要求指明插入信息就就是学号不满足条件还就就是课程号不满足条件(注:Student表与sc表得外键约束要先取消)。

createtriggersc_insert

onsc

afterinsert

as

ifnotexists(select*fromstudent,inserted

?? wherestudent、sno=inserted、sno)

?begin

print'插入信息得学号不在学生表中!

?ifnotexists(select*fromcourse,insertedwherecourse、cno=inserted、cno)

? print插入信息得课程号不在课程表中!

?rollback

end

else

begin

? ifnotexists(select*fromcourse,insertedwherecourse、cno=inserted、cno)

?begin

??print插入信息得课程号不在课程表中!

???rollback

?end

end

执行:

=1\*GB3①、insertintoSC

values001',78)

删除外键约束:

altertableSC

dropconstraintFK__SC__Sno__182C9B23

=2\*GB3②、insertintoSC

values(001,78)

=3\*GB3③、insertintoSC

values006,78)

(2)为Course表创建一个触发器Course_del,当删除了Course表中得一条课程信息时,同时将表sc表中相应得学生选课记录删除掉。

createtriggercourse_del

oncourse

afterdelete

as

ifexists(select*fromsc,deleted

?? wheresc、cno=deleted、cno)

begin

deletefromsc

?wheresc、cnoin(selectcnofromdeleted)

end

deletefromCourse

whereCno=003'

select*fromSC

(3)在Course表中添加一个平均成绩avg_Grade字段(记录每门课程得平均成绩),创建一个触发器Grade_modify,当SC表中得某学生得成绩发生变化时,则Course表中得平均成绩也能及时相应得发生改变。

altertableCourse

addavg_Gradesmallint

updateCourse

setavg_Grade=(selectAVG(Grade)fromSC

whereSC、Cno=Course、Cno)

select*fromCourse

createtriggerGrade_modify

onsc

afterupdate

as

ifupdate(grade)

begin

? updatecourse

??setavg_grade=(selectavg(grade)

? ?fromscwherecourse、cno=sc、cno

? groupbycno)

end?

updateSC

setGrade=90

whereSnoandCno='001'

(4)测试上述三个触发器。

测试过程在(1)、(2)、(3)中均给出

2、创建insteadof触发器

(1)创建一视图Student_view,包含学号、姓名、课程号、课程名、成绩等属性,在Student_view上创建一个触发器Grade_moidfy,当对Student_view中得学生得成绩进行修改时,实际修改得就就是sc中得相应记录。

createviewStudent_view

as

selects、Sno,Sname,c、Cno,Cname,Grade

fromStude

显示全部
相似文档