面试必备——数据库触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中。任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

定义触发器

触发器又叫做事件-条件-动作规则。当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,可以涉及其他表和其他数据库对象,通常是一段SQL存储过程。
SQL使用CREATE TRIGGER命令建立触发器。

CREATE TRIGGER <触发器名>							/*每当触发事件发生时,该触发器被激活*/
{BEFORE|AFTER}<触发事件>ON<表名>			/*指明触发器激活的时间是在执行触发事件前或后*/
REFERENCING NEW|OLD ROW AS <变量>	/*REFERENCING指出引用的变量*/
FOR EACH{ROW|STATEMENT}						/*定义触发器的类型,指明动作体执行的频率*/
[WHEN <触发条件>]<触发动作体>						/*仅当触发条件为真时才执行触发动作体*/

触发事件可以是INSERT、DELETE或UPDATE,也可以是这几个事件的组合。

激活触发器

触发器的执行是由触发事件激活,并由数据库服务器自动执行的。一个数据表上可能定义了多个触发器,同一个表上的多个触发器激活时遵循如下的执行顺序:
(1)执行该表上的BEFORE触发器;
(2)激活触发器的SQL语句;
(3)执行该表上的AFTER触发器。
对于同一个表上的多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则。有些关系数据库管理系统是按照触发器名字的字母排序顺序执行触发器。
编写触发器时,需要注意以下几点:
触发器不接受参数,最大为32KB。
一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。
在触发器的执行部分只能用DML语句(SELECT,INSERT,UPDATE,
DELETE),不能使用DDL语句(CREATE,ALTER,DROP)。
在触发语句中不能包含事务控制语句(COMMIT,ROLLBACK,
SAVEPOINT)。在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。

你可能感兴趣的:(数据库)