触发器简述

来源:互联网 发布:全球钢铁产量排名 知乎 编辑:程序博客网 时间:2024/06/05 16:56

触发器原理:

         触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用execute语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。

触发器的作用:

         触发器的主要作用是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。在下列情况下使用触发器实现复杂的引用完整性;强制数据间的完整性。创建多行触发器,当插入、更新、删除多行数据时,必须编写一个处理多行数据的触发器。执行级联更新或级联删除这样的动作,级联修改数据库中的所有相关表。撤销或者回滚违反引用完整性的操作,防止非法修改数据。

触发器与存储过程的区别:

         存储过程:是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以出于任何使用SQL语句的目的来使用存储过程,它具有以下特点:

a)      可以从自己的存储过程中执行一系列SQL语句。

b)      可以从自己的存储过程内引用其他存储过程,这可以简化一些列复杂语句。

c)      存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL单个语句快。

触发器:是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中

对数据进行修改时,触发器会生效:UPDATE、INSERT或DELETE。触发器可以查询其它表,而且可以包含复杂的SQL语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于用户的当前账户状态插入订单。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。触发器优点如下:

a)      触发器是自动的:他们在对表的数据作了任何修改之后立即激活

b)      触发器可以通过数据库中的相关表进行层叠更改,例如,可以在titles表的title_id列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用title_id列作为唯一键,在titleauthor、sales及rsysched表中对各行匹配进行定位。

c)      触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。例如:触发器可以回滚视图对价格将低于10美元的书(存储在title表中)应用折扣(存储在discounts表中)的更新。

 

触发器类型

a)        DML触发器

Oracle可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。

b)        替代触发器

由于在Oracle里,不能直接对由两个以上的表建立视图进行操作。所以给出了替代触发器。它就是Oracle8专门为进行视图操作的一种处理方法

c)        系统触发器

Oracle8i提供了第三种类型的触发器叫系统触发器。它可以在Oracle数据库系统的时间中进行触发,如Oracle系统的启动与关闭。

d)      创建触发器

创建触发器的一般语法是:

CREATE [OR REPLACE] TRIGGER trigger_name

[BEFORE|AFTER] trigger_event ON table_reference

[FOR EACH ROW[WHEN trigger_condition]] trigger_body;

当一个基表被修改(insert,update,delete)时要执行的内嵌过程。执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。

0 0
原创粉丝点击