触发器的相关知识

 CREATE TRIGGER命令用于定义和命名一个触发器,然后把这个触发器存放在数据库中。

 
CREATE [ OR REPLACE ] TRIGGER name
 
{ BEFORE | AFTER }
 
 { INSERT | UPDATE | DELETE } [ OR ...]
 
 ON table
 
[ FOR EACH ROW ]
 
[ DECLARE
 
declarations ]
 
 BEGIN
 
statements
 
 END;
 
name是触发器的名称。
如果指定了[ OR REPLACE ]子句,并且同一模式中存在相同名称的触发器,那么新定义的触发器将替代原先的那个。
如果没有指定[ OR REPLACE ]子句,将不允许替代同一模式中具有相同名称的触发器。
 
如果指定了BEFORE子句,那么新定义的触发器是before类型触发器。
在一个before类型行级触发器中,在触发事件操作每一行记录之前,都要执行触发器代码块。
而在before类型语句级触发器中,触发器代码块是在触发语句执行之前执行。
如果指定了AFTER子句,那么触发器是一个after类型触发器。
在一个after类型行级触发中,在触发事件操作每一行记录之后,执行触发器代码块。
在after类型语句级触发器中,触发器代码块是在执行触发语句之后执行。
 
我们必须指定INSERT,UPDATE或DELETE中的任意一个来分别定义插入,更新或删除的触发事件,
当我们用多个保留的触发事件关键字定义触发器事件时,可以用关键字OR把它们分隔开。
 
table是表的名称,在这个表上定义的触发器事件会对触发器进行激活。
 
如果指定了[ FOR EACH ROW ]子句,那么就把触发器定义为行级的触发器。
如果没有使用这个子句,那么触发器就是一个语句级触发器。
 
declarations是变量,游标或类型的声明。
 
statements是SPL程序语句。
 
BEGIN-END是一个可以包含异常处理部分的代码块。
 
 
在触发器代码块中,可以使用一些特定的变量进行操作,它们包括:
 
NEW
 
NEW是一个伪记录名称,用来指向在行级触发器中向表中进行插入和更新操作而产生的新记录值。
这个变量不能在语句级触发器和行级触发器的删除操作中应用。
 
它的用法是::NEW.column, 其中column是触发器所在表中列的名称。
 
当使用before类型行级触发器的时候,:NEW.column的初始内容是新记录的列值,
这个值是新插入或者替代原有记录的新记录中列的值。而当在after类型行级触发器中使用的时候,
这个值已经存放在表中,因为已经对所影响的记录进行了相应操作。
 
在触发器代码块中,可以像使用其他变量那样使用:NEW.column ,
如果在一个before类型行级触发器代码块中将一个值分配给了:NEW.column,
所分配的值就在新插入或更新的记录中使用。
 
OLD
 
OLD是一个伪列名,用来指向在行级触发器中更新和删除操作涉及到原先表中的值。
这个变量不能在语句级触发器和行级触发器的插入操作中应用。
 
它的用法是::OLD.column, 其中column是触发器所在表中列的名称。
 
当使用before类型行级触发器的时候,:OLD.column的初始内容是列的值,
这个值是被删除或者被替代记录中列的值。当在after类型行级触发器使用的时候,
这个值不再 存放在表中,因为已经对所影响的记录进行了相应操作。
 
在触发器代码块中,可以像其他变量那样使用:OLD.column ,
如果在一个before行级触发器代码块中将一个值分配给了:OLD.column,那么在触发器的操作上就没有实际作用了。
 
INSERTING
 
INSERTING 是一个条件表达式,如果插入操作触发了触发器,那么这个表达式返回真,否则返回假。
 
UPDATING
 
UPDATE是一个条件表达式,如果更新操作触发了触发器,那么这个表达式返回真,否则返回假。
 
DELETING
 
DELETE是一个条件表达式,如果是删除操作触发了触发器,那么这个表达式返回真,否则返回假。
 

你可能感兴趣的:(触发器)