触发器是一种特殊类型的存储过程,当指定表中的数据发生变化时触发器自动生效。它与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称直接被调用(与存储过程的区别),更不允许设置参数。
DML触发器的创建:
①在student表上创建触发器t1,在用户插入、修改和删除记录时,都会自动显示表中的内容。
create trigger t1
on student
after insert, update, delete
as
select *
from student;
②建立一个触发器t2,当向student表中插入数据时,如果姓名不重复则插入,如果出现姓名重复的情况, 则提示错误(raiserror(‘姓名重复,不能插入’,16,1))并回滚该事务(即取消插入的行)。
create trigger t2
on student
after insert
as
begin
declare @str char(10)
declare @ssno int
select @str = sname from inserted
select @ssno = count(*)
from student
where sname = @str
if(@ssno >= 2)
begin
raiserror ('姓名重复,无法插入',16, 1) -- 提示错误消息
rollback -- 回滚
end
end
③一个修改触发器t4,该触发器防止用户修改表student的学号。
create trigger t4
on student
for update
as
begin
if(update(sno))
begin
raiserror ('不能修改学号',16, 1)
rollback
end
end
④创建触发器t6,当删除student表中的某个学生记录时,应该也同时删除score表中该生的选课记录。
create trigger t6
on student
after delete
as
declare @sno char(5)
select @sno = sno
from deleted
delete
from score
where sno = @sno
delete
from student
where sno = '122';