数据库

首页 » 常识 » 问答 » SQL语言基础触发器相关知识介绍
TUhjnbcbe - 2024/9/30 17:08:00

1、触发器Trigger介绍

触发器可以实现完整性规则和保证一些复杂业务规则的实施。针对示警或满足特定条件下自动执行某项任务来说,触发器时十分有用的机制。触发器是由事件1驱动的特殊过程,一旦由某个用户定义,任何用户对该触发器指定的数据新增、删除、修改操作,系统会自动激活相应的触发器,在核心层进行集中的完整性控制。

2、触发器特点

1)当数据库开发者声明事件发生时,触发器激活,事件可以时对某个特定关系的插入、删除、更新。

2)触发器被事件激活后,不是立即执行,而是先由触发器测试触发条件,若条件不成立,响应该事件的触发器将不做任何处理。

3)如果触发器的申明条件满足时,则与该触发器相连的动作由DBMS执行。可以阻止事件、撤销事件。

注意事项:

1)触发器为数据库对象时,创建触发器必须指定名称、在其定义触发器的表、触发器触发时机、触发器做什么事情。触发器不能作用在临时表,但可以引用临时表。

3、触发器分类

行级触发器:对事件影响的每一行(FOREACHROW),每一元组执行。

语句级触发器:对整个事件只执行一次触发过程(FOREACHSTATEMENT)。是触发器默认方式。

4、创建触发器

触发器定义包括:触发器的触发事件、触发器执行的动作。针对update操作中还可以指定特定的属性或属性组的修改为触发条件。事件的触发还有两个相关时间:before、after。

before:触发器是在事件发生之前触发。

after:触发器是在事件发生之后触发。

创建触发器语法格式:

createtrigger触发器名称[{after

before}]

{[delete

update

updateof[列名清单]]}

on表名

[referencing临时视图名称]

[when触发条件]

begin

触发动作

end[触发器]

参数说明:

before:说明DBMS在执行触发语句之前激发触发器。

after:说明DBMS在执行触发语句之后激发触发器。

delete:delete触发器,每当一个delete语句从表中删除一行时激发触发器。

insert:insert,每当一个insert语句从表中插入一行时激发触发器。

update:update触发器,每当update语句修改由of子句指定的列值时激发触发器。如果忽略of子句,表示任何列值时,DBMS都将激发触发器。

referencing临时视图名称:指定临时视图的别名。在触发器运行过程中,系统会生成两个临时视图,分别存放更新值(旧值)、更新后的值(新值)。

行级触发器:默认临时视图名分别时OLD、NEW。

语句触发器:默认临时视图名分别时OLD-TABLE、NEW-TABLE。触发器结束临时视图也会随着销毁。

WHEN触发条件:指定触发器的触发条件。只有条件满足触发条件时,才会激发触发器。触发条件必须包含临时视图名、不包含查询。

针对示警或满足特定条件下自动执行某项任务来说,触发时非常有用的机制。

5、更改触发器

语法格式:

altertrigger触发器名[{after

before}]

要执行的SQL语句

end

6、删除触发器

droptrigger触发器名[,...n]

说明:n表示可以指定多个触发器的占位符。

7、完整示例

-需求:当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据

--创建触发器(添加)

CREATETRIGGERtri_empAddAFTERINSERTONemployeeFOREACHROW--当往员工表插入一条记录时

INSERTINTOtest_log(content)VALUES(员工表插入了一条记录);

CREATETRIGGERtri_empUpdAFTERUPDATEONemployeeFOREACHROW--当往员工表修改一条记录时

INSERTINTOtest_log(content)VALUES(员工表修改了一条记录);  

CREATETRIGGERtri_empDelAFTERDELETEONemployeeFOREACHROW--当往员工表删除一条记录时

INSERTINTOtest_log(content)VALUES(员工表删除了一条记录);  

--删除创建触发器

DROPTRIGGERtri_empAdd;  

触发器事件:数据库表行的插入、删除、修改。也就是执行insert、delete、update语句。

1
查看完整版本: SQL语言基础触发器相关知识介绍