概念
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。——百度百科
其实,触发器和编程语言的事件类似,都是由一件事引发另一些事......它也类似存储过程,能快速、完整实现一串的操作。
举例
-- =============================================
-- Author: 赵寒
-- Create date:2015-6-13 16:51:25
-- Description: 删除类别触发器
-- =============================================
CREATE TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[categoryinfo]
instead of DELETE --替换删除操作
AS
BEGIN
declare @caId int
select @caId=id from deleted --要删除的类别号
--删除评论
delete commentinfo where newsId in(select newsId from newsinfo where caId=@caId)
--删除新闻
delete newsinfo where caId=@caId
--删除类别
delete categoryinfo where id=@caId
END
若要在新闻发布系统中删除类别,需要连同类别下的新闻内容,以及新闻内容的评论一起删掉。因为他们存在主外键的关系,所以当想要删除类别的时候,其实删除顺序应该为:评论、新闻内容、类别。也因此,不能通过删除完信息来触发触发器中的事件,所以用:
instead of DELETE
来替代。这个意思是,用下面的事件替换上面提到的删除事件。
所以,上面的触发器的含义就是:
当删除类别时触发此触发器,但这时还没有删,取而代之的下面的三个删除语句。
此时,要删除的信息已到deleted中。因此从deleted中选出类别号。
通过类别号找到新闻号,通过新闻号找到评论号,按评论-新闻-类别的顺序依次删除要删除的信息。
这样,一次触发,一连串的执行就操作完成了,保证了数据的完整性,并且很高效~~