实验6 触发器的使用
- 实验目的
- 掌握触发器的创建、修改和删除操作。
- 掌握触发器的触发执行。
- 掌握触发器与约束的不同。
二、实验要求 1.创建触发器。 2.触发器执行触发器。 3.验证约束与触发器的不同作用期。 4.删除新创建的触发器。
三、实验内容
(一)示例 1.创建触发器 ①启动SQL Server 查询编辑器,选择要操作数据库,如“学生_课程”数据库。 ②在查询命令窗口中输入以下CREATE TRIGGER语句,创建一个针对Student表的触发器,打印共修改了多少行数据。 –创建触发器 create trigger tr_student_update on Student for update as declare @msg varchar(100) select @msg=str( @@rowcount )+’ Student updated by this statement’ print @msg return go
create trigger tr_student_update
on Student
for update
as declare @msg varchar(100)
select msg =str(@@rowcount) +
'Student updated by this statement'
print @msg
return
go
③点击快捷工具栏上的快捷按钮,完成触发器的创建。
- 触发触发器 ①在查询命令窗口中输入以下UPDATE语句,修改年龄列,激发触发器。 update Student set Sage=Sage+1 ②观察执行结果,并记录下来。
update Student
set Sage = Sage +1
- 删除新创建的触发器 ①在查询命令窗口中输入DROP TRIGGER 语句,删除新创建的触发器。 DROP TRIGGER tr_student_update ②点击快捷工具栏上的快捷按钮,删除触发器。
-
drop trigger tr_student_update
创建一个触发器,实现对学生信息的级联删除,即删除student表中的某名学生后自动删除SC表中该生的选课记录信息。
create trigger tri_student_delete
ON Student
after delete
as
begin
declare @num int
set @num = @@rowcount
if @num=0
begin
print '没有删除记录'
return
END
if @num>1
begin
rollback transaction
raiserror('您只能删除一条记录',16,10)
return
end
declare @sno char(10)
select @sno = sno
from Deleted
delete sc where sno=@sno
print '级联删除成功'
end
(二)思考题 1.在Student表中编写insert的触发器,假如每个班的学生不能超过30个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。
create trigger tr_student_insert
on Student
for insert,update
as
declare @sno numeric
select @sno=sno from Student
if(@sno>30)
begin
print '插入不成功'
rollback
end
else
print'插入成功'
2.在SC表上编写update触发器,当修改SC表中的grade字段时将其修改前后的信息保存在SC_log表中。
create trigger tr_sc_update
on SC
for update
as
if update(grade)
insert into SC_log select* from deleted
insert into SC_log select* from inserted
四、实验报告要求 1、写出与上述任务相对应的SQL语句 2、并记录在实验过程中遇到的问题、解决办法及心得体会。