概述
含义
是一种表或视图执行插入(insert)、 删除(delete)、修改(update)操作时,被系统自动执行的特殊的存储过程。
与存储过程的区别
- 存储过程的执行通过调用过程名来完成;
- 触发器的执行不能通过名称调用完成,而在某个指定的事件执行时被激活,如insert、update、delete数据时,会自动触发与该事件相关的触发器,使其自动执行;
- 触发器不允许带参数。
创建触发器
格式
create trigger 触发器名 on 表名| 视图名
for | after | instead of [ insert , update, delete ]
as SQL语句
insert触发器
例:在学生库的成绩表上创建1个名为tr_insert_cj的触发器,当向成绩表进行插入操作时激发该触发器,并给出提示信息“有新成绩插入到成绩表中!”
create trigger tr_insert_cj on 成绩
after insert
as print ‘有新成绩信息插入到成绩表! ’
go
insert into 成绩 values( ‘150102', ‘202', 99)
说明: 当插入的数据违反了先前定义的约束规则时,则约束优先于触发器起作用,该插入触发器不会被激发。
delete触发器
例:在学生库的成绩表上创建1个名为tr_delete_cj的触发器,当要删除指定学生选课成绩记录时,激发该触发器,撤消删除操作,并给出提示信息“不能删除该学生的选课成绩信息!”。
create trigger tr_delete_cj
on 成绩
after delete
as
rollback transaction-- 撤消删除操作
print ‘不能删除该学生的选课成绩的信息!’
go
delete 成绩 where 学号= ‘150101'
update触发器
例:在“学生”表上创建名为tr_update_xs的触发器,当对该表的“姓名”列修改时激发该触发器,使用户不能修改“姓名”列。
create trigger tr_update_xs on 学生
after update
as
if update(姓名)
begin
rollback transaction -- 撤消修改操作
print ‘不能修改学生姓名!’
end
go
update 学生 set 姓名=‘小红’ where 姓名=‘王红’
注意
(1)每个触发器被激活时,系统都为它自动创建两个临时表:inserted表、deleted表。inserted表、deleted表是逻辑表,由系统来维护,用户不能对它们进行修改。
其结构与源表 (触发器作用的表)结构相同,触发器执行完成后,该临时表会自动被删除。
(2)inserted临时表的作用:
当向表中插入数据时,如果该表存在insert触发器,触发器将被触发而自动执行。此时,系统将自动创建一个与触发器表具有相同表结构的inserted临时表,新的记录被添加到触发器表和inserted 表中。
(3)deleted 临时表的作用:
当从表中删除数据时,如果该表有delete触发器,触发器将被触发而自动执行。此时,系统将自动创建一个与触发器表具有相同表结构的deleted临时表,用来保存触发器中被删除的记录。
(4)当修改表中数据时, 相当于删除一条旧的记录,添加一条新的记录,其中被删除的记录放在deleted表中,同时添加的新记录放在inserted 表中。
例:在“课程”表上创建一个触发器。当更新了某门课程的课程编号信息时,就激活触发器级联更新“成绩”表中相关成绩记录中的课程编号信息,并使用print语句返回一个提示信息。
create trigger tr_update_kc on 课程
after update
As
if update(课程编号)
begin
update 成绩
set 成绩.课程编号=(select 课程编号 from inserted)
where 成绩.课程编号=(select 课程编号 from deleted)
end
go
update 课程 set 课程编号=‘555’ where 课程编号=‘212’
更新触发器
alter trigger 触发器名
……
删除触发器
drop trigger 触发器名[,…n]
禁用触发器
Alter table 表名 {enable | disable} trigger {all | 触发器名[,…n]}
最后
以上就是重要大炮为你收集整理的【SQL Server】数据库——触发器创建触发器更新触发器删除触发器禁用触发器的全部内容,希望文章能够帮你解决【SQL Server】数据库——触发器创建触发器更新触发器删除触发器禁用触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复