概述
触发器使用户定义在关系表上的一类由事件驱动的特殊过程,也是一种保证数据完整性的方法。
触发器的主要作用是实现主键和外键不能保证的复杂的参照完整性和数据一致性。其他功能:
- 强化约束:能够实现比CHECK语句更复杂的约束。
- 跟踪变化:侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
- 级联运行:侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。
- 存储过程的调用:可以调用一个或多个存储过程。
触发器分两类(DML触发器和DDL触发器)
- DML触发器:DML触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。
- DDL触发器:DDL触发器是在响应数据定义语言事件时执行的存储过程,一般用于执行数据库中的管理任务、审核和规范数据库操作、防止数据库表结构被修改等。
DML触发器工作原理
DML触发器是发生数据操作语言时执行的触发器,主要针对添加、修改、删除进行触发。
SQL Server 2008中,为DML触发器定义了两个特殊的表:
- 插入表INSERTED
- 删除表
两张表再数据库服务器内存中,是由系统管理的逻辑表,用户只能读取。触发器完成工作后两张表会从内存中删除。
DML触发器分两类
- AFTER触发器:在记录变更后才被激活,以删除为例。SQL接收到一个要执行删除操作的SQL语句时, SQL Server先将要删除的记录存放在删除表DELETED中,然后把数据表中的记录删除,再激活AFTER触发器,执行AFTER触发器中的SQL语句。执行完毕后,删除内存中的DELETED表,退出整个操作。
- INSTEAD OF触发器:在INSERT、UPDATE、DELETE这些操作进行前被激活,并且不去执行原来的SQL操作,而是用触发器内部的SQL语句代替执行。
创建触发器
创建触发器需要指定以下几项内容:
- 触发器的名称
- 在其上定义触发器的表
- 触发器将何时激活
- 执行触发操作的编程语句
定义语句:
CREATE TRIGGER <触发器名>
ON {表名 | 视图名}
[WiTH ENCRYPTION]
{AFTER|INSTEAD OF} {[INSERT][, ][UPDATE][, ][DELETE]}
[NOT FOR REPLICATION]
AS
SQL语句
参数作用如下:
- 触发器名:给出了触发器的名称
- 表名|视图名:触发器所依存的表或视图名称
- WITH ENCRYPTION:加密触发器代码,使用户无法查看,防止SQL Server对触发器进行复制
- AFTER:表示触发器只有在SQL语句中指定的所有操作都已成功执行后才激活。(视图上面不可以定义AFTER触发器)
- INSTEAD OF:表示在表或视图上执行增删改查操作时用该触发器中的SQL语句代替原语句。
- [INSERT][, ][UPDATE][, ][DELETE]:说明激活触发器的条件,可选择多项
- NOT FOR REPLICATION:表示在表的复制过程中对表的修改将不会激活触发器。
- SQl语句:触发器所要执行的SQL语句,它可以是一组SQL语句,可以是包含流程的控制语句。
注释:在MySQL数据库中,对于INSERT语句, 只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在
和NEW以及OLD同时使用。
1.INSERT触发器
INSERT触发器在每次向基本表插入数据时,触发执行,该数据同时复制到基本表和内存的INSERTED表中。INSERT触发器主要有3个作用:
- 检验要输入的数据是否符合规则
- 在插入的数据中增加数据
- 级联改变数据库中其他的数据表
2.DELETE触发器
DELETE触发器在从基本表中删除数据时触发执行,在用户执行了DELETE触发器后,SQL Server将删除的数据行保存在DELETED表中,即数据行并没有消失,还可以在SQL语句中引用。
DELETE触发器主要作用:
- 防止删除数据库中的某些数据行
- 级联删除数据库中其他表的数据行
3.UPDATE触发器
UPDATE触发器合并了DELETED触发器和INSERT触发器的作用。
用户在执行UPDATE语句后,原来数据行从基本表中删除,但保存在DELETED表中,同时基本表更新后的新数据行也在INSERTED表中保存了一个副本。
用户可以利用DELETED表和INSERTED表获取前后的数据行,完成比较操作。
4.INSTEAD OF触发器
INSTEAD OF触发器为替代性操作触发器,可用于视图操作。
在用视图修改基本表中的数据行时有可能导致失败。
解决方法之一:对视图建立INSTEAD OF触发器,通过触发器插入所缺的列值完成更新。
修改触发器
定义语句:
ALTER TRIGGER <触发器名>
ON {表名 | 视图名}
[WiTH ENCRYPTION]
{AFTER|INSTEAD OF} {[INSERT][, ][UPDATE][, ][DELETE]}
[NOT FOR REPLICATION]
AS
SQL语句
删除触发器
定义语句:
DROP TRIGGER 触发器名
最后
以上就是孤独乌冬面为你收集整理的SQL 触发器 简记的全部内容,希望文章能够帮你解决SQL 触发器 简记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复