码迷,mamicode.com
首页 > 数据库 > 详细

【SQL】——触发器

时间:2015-06-21 18:41:07      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:触发器   数据库   sql   

概念

        触发器(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中选出类别号。
        通过类别号找到新闻号,通过新闻号找到评论号,按评论-新闻-类别的顺序依次删除要删除的信息。
        
这样,一次触发,一连串的执行就操作完成了,保证了数据的完整性,并且很高效~~

【SQL】——触发器

标签:触发器   数据库   sql   

原文地址:http://blog.csdn.net/onlybymyself/article/details/46581995

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!