sqlserver数据库实验 实验九 触发器的创建与使用

实验九触发器的创建与使用

一、实验目的

本实验的目的是使学生进一步掌握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)分别创建:

  1. INSERT触发器t_inst_stu
  2. DELETE触发器t_dele_stu
  3. 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

 

你可能感兴趣的:(sqlserver数据库实验 实验九 触发器的创建与使用)