我是靠谱客的博主 激昂萝莉,最近开发中收集的这篇文章主要介绍触发器(Trigger),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

触发器(Trigger)

概念

  1)触发器是一种特殊的存储过程,主要有操作事件(INSERT,UPDATE,DELETE)触发而自动执行,不是由用户直接调用,创建触发器是会对其进行定义,以便在特定的表或列作特定类型的数据修改时执行。

 2)触发器是一种过程完整性约束,是一段程序,该程序在特定时刻被自动触发执行,比如在一次更新操作之前执行,或者更新操作之后执行。

作用

1)可以强制执行业务规则

2)可以通过数据库的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。

3)可以实现比约束更复杂的数据完整性,经常用于加强数据的完整性约束和业务规则

4)自动化操作,减少了手动操作以及出错的几率。

分类

按照触发时间分类:

BEFORE 触发器:触发事件之前执行的触发器

AFTER触发器:

 在语句执行完毕之后进行触发

 按语句触发,而不是所影响的行数,无论影响为多少行,只触发一次

只能建立在常规表上,不能建立在视图和临时表上

可以递归触发,最高可达32级

Update(列),update语句触发时,判断某列是否被更新,返回bool 值

INSTEAD OF触发器

用来替换原本的操作

不会递归触发

可以在约束被检查之间触发

可以建在表和视图上

 

当触发事件发生以后执行触发器中指定的函数,而不是执行产生触发事件的SQL 语句,从而替代产生触发事件的SQL操作。在表或视图上,对于INSERTUPDATE DELETE 三种触发事件,每种最多可以定义一个INSTEAD OF 触发器。

例如我要删除某新闻类别,如果用AFTER 触发器,当删除新闻类别后,就会出现报错。请看【问题发现

INSTEAD OF 触发器(执行触发器里面的语句)

牛腩中触发器应用

1)问题发现

你们会不会有一个疑问?假如我要删除某一个类别的新闻,(前提:该新闻类别下有新闻,和新闻评论)我是先删除评论呢?然后在删除新闻呢?最后删除类别呢?还是先删除类别,最后在删除评论呢?

2)创建触发器

Create TRIGGER [触发器名称]                --建立触发器的名称
    on [表名]                              --选择要建立触发器的表
    INSTEAD OF  delete                     --触发条件 插入/删除/更新(任选一个)
AS                                         --伴随
BEGIN                                      --开始执行
select *  from deleted                            
END  

3)解决问题:

大家注重看一下删除的顺序?(先删除新闻评论,在删除新闻,最后删除新闻类别)

Create TRIGGER [dbo].[tCategoryDelete]             --建立触发器的名称
    on category                                    --选择要建立触发器的表
    INSTEAD OF  delete                             --触发条件 插入/删除/更新(任选一个)
AS                                                 --伴随
BEGIN                                              --开始执行  
    --声明一个整型的变量                                        
    declare @caId int
	select @caId=id from deleted
	--删除评论
	delete comment where newsId in(select newsId from news where caId=@caId)
	--删除新闻
	delete news where caId=@caId
	--删除新闻类别 
	delete category where id=@caId                         
END  

不过关于触发器还是要慎用,下面是我查询到的一些帖子。

                                           

 

  今天的学习就先分享到这里,对触发器的了解只是一点皮毛,后期遇见再次会分享给大家,博客会持续更新,欢迎大家关注点评,谢谢!

最后

以上就是激昂萝莉为你收集整理的触发器(Trigger)的全部内容,希望文章能够帮你解决触发器(Trigger)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部