SQL 之 触发器

来源:互联网 发布:d h算法 编辑:程序博客网 时间:2024/04/30 22:30

触发器 triiger

触发器是种特殊的存储过程,它的执行不是由程序调用,不需要要手动操作,而是由事件触发。就好像按钮的点击事件,网页的Load事件一样,触发器的事件是由对表进行增删改操作触发的,当对一个数据库进行增删改时就会激活触发器。


从SQL2005开始,根据SQL语句的不同将触发器分成了两类,一类是DML触发器,一类是DLL触发器,DML触发器又分为两类。


触发器的分类:

DML触发器:Data Manipulation Language,这种触发器是当数据器服务器中发生数据操作语言事件时执行的存储过程。又分为两类:After触发器和Instead Of触发器

DDL触发器:DDL触发器是在响应数据定义语言Data Definition Language事件时执行的存储过程,DDL触发器一般用于执行数据库中管理任务,比如审核和规范数据库操作,防止数据表结构被修改等。


DML触发器

After触发器:在记录已经完全改变之后,才会被激活操作。主要用于记录变更后的处理或检查,一旦发生错误,也可以用Rollback Transaction回滚事务语句来回滚本次的操作。

Instead Of触发器:不执行导致 trigger 触发的语句,而只执行触发器 。一般用来取代原来的操作,在记录变更之前发生的,它并不执行原来的SQL语句里的操作(Insert, Update, Delete),而去执行触发器本身所定义的操作。


1. After触发器只能用于数据表不能用于视图,Instead Of触发器两者皆可,设置为With Check Option的视图也不允许建立Instead Of触发器,两种触发器都不能建立在临时表上。

2.一个数据表可以有多个触发器,但是一个触发器只能对应一个表。

3.在同一个数据表中,对每个操作而言可以建立多个After触发器,但是Instead Of触发器针对每个操作只能建立一个。

4.如果针对某个操作既设置了After触发器又设置了Instead Of触发器,那么Instead Of触发器触发器总会被激活,After触发器就不一定会激活。

5.不同的SQL语句,可以触发同一个触发器,如Insert和Update语句都可以激活同一个触发器。

6.触发器名所在的数据库必须是唯一的,由于触发器是建立在数据表或者视图中的,所以有些使用者可能误以为只要是在不同的数据表中,触发器的名称就可以相同,其实触发器的全名(Server.Database.Owner.TriggerName)是必须 唯一的,这与触发器在哪个数据表或视图无关。

0 0