实验九触发器的创建与使用
一、实验目的
本实验的目的是使学生进一步掌握SQL Server触发器的创建及使用方法,加深SQL触发器的理解。通过对数据的更新操作体会其触发器的作用。
二、实验准备
结合课堂教学内容,了解触发器的相关知识,掌握触发器的定义,理解触发器的使用方法及其特点。
三、实验要求
1. 掌握T-SQL创建触发器语句Create trigger的使用。
2. 完成所规定的触发器定义要求。
3. 通过数据查询检查触发器的使用效果。
4.注意操作结果的截图与保存,供撰写实验报告使用。
四、实验内容
1. 在班级表class中增加班级人数(c_total)字段。
2. 为学生表(student)创建INSERT触发器t_inst_stu:新增一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动加1。
3.为学生表(student)创建DELETE触发器t_dele_stu:删除一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动减1。
4. 为学生表(student)创建UPDATE触发器t_update_stu:当某学生所在班号发生变化时(即调到另一班级后),将其原先所在班级的人数(c_total)减1,将新调入的班级班级的人数(c_total)加1。
5. 体会触发器的作用。
五、实验步骤
在查询分析器中完成实验内容。
1. 使用alter table语句在班级表class中增加班级人数(c_total)字段,默认值(DEFAULT)是0;对表中c_total字段的值进行修改。
2. 为学生表(student)分别创建:
- INSERT触发器t_inst_stu
- DELETE触发器t_dele_stu
- UPDATE触发器t_update_stu
3. 体会触发器的作用:
1) 查看班级表(class)
2)对学生表(student)分别插入(INSERT)、删除(DELETE)和修改(UPDATE)元组
3)再次查看班级表(class),检查其数据的变化情况,体会触发器的作用。
--在班级表class中增加班级人数(c_total)字段
alter table class add c_total int default 0
go
--修改c_total的值
update class set c_total=(select count(*) from student where class.clsNO=student.clsNO)
go
--为学生表(student)创建INSERT触发器t_inst_stu:新增一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动加1
create trigger t_inst_stu
on student after insert as
begin
declare @clsNO char(6);
declare cur cursor fast_forward for select clsNO from inserted;
open cur;
fetch next from cur into @clsNO;
while @@fetch_status=0
begin
if(@clsNO is not null)
update class set c_total=c_total+1 where clsNO=@clsNO;
fetch next from cur into @clsNO;
end
close cur;
deallocate cur;
end
go
--为学生表(student)创建DELETE触发器t_dele_stu:删除一名学生时,若其班级编号非空,则将班级表(class)中相应班级的人数(c_total)自动减1
create trigger t_dele_stu
on student after delete as
begin
declare @clsNO char(6);
declare cur cursor fast_forward for select clsNO from deleted;
open cur;
fetch next from cur into @clsNO;
while @@fetch_status=0
begin
if(@clsNO is not null)
update class set c_total=c_total-1 where clsNO=@clsNO;
fetch next from cur into @clsNO;
end
close cur;
deallocate cur;
end
go
--为学生表(student)创建UPDATE触发器t_update_stu:当某学生所在班号发生变化时(即调到另一班级后),将其原先所在班级的人数(c_total)减1,将新调入的班级班级的人数(c_total)加1
create trigger t_update_stu
on student after update as
begin
declare @clsNO char(6);
declare cur cursor fast_forward for select clsNO from inserted;
open cur;
fetch next from cur into @clsNO;
while @@fetch_status=0
begin
if(@clsNO is not null)
update class set c_total=c_total+1 where clsNO=@clsNO;
fetch next from cur into @clsNO;
end
close cur;
deallocate cur;
declare cur cursor fast_forward for select clsNO from deleted;
open cur;
fetch next from cur into @clsNO;
while @@fetch_status=0
begin
if(@clsNO is not null)
update class set c_total=c_total-1 where clsNO=@clsNO;
fetch next from cur into @clsNO;
end
close cur;
deallocate cur;
end
--大吉大利,今晚AC