触发器简介
触发器语法
不同类型触发器用到的所有都在这里
CREATE [OR REPLACE] TRIGGER trigger_name
[BEFORE | AFTER] --触发器的触发时间,在DML操作之间就BEFORE,在DML操作之后就AFTER触发
[INSTEAD OF] --替代触发器,对于视图操作所定义的触发器类型
[INSERT | UPDATE | UPDATE OF列名称 | DELETE] --触发的事件,可以是数据表的增加INSERT,更新UPDATE,删除DELETE或者部分更新
ON [表名称 | 视图 | DATABASE | SCHEMA ] --指的是触发器的触发对象,可以是表,视图,数据库,模式(用户)
REFERENCING [OLD AS 标记][NEW AS标记][PARENT AS标记] --对于":old",":new",":parent"这3个标识定义别名
[FOR EACH ROW] --定义行级触发器。如果不写,表示定义表级(语句级)触发器
[FOLLOWS 触发器名称] --配置多个触发器执行先后次序
[DISABLE] --一个触发器,建立之后默认是启用状态,可以使用此选项,将其定义为禁用
[WHEN 触发条件] --当满足指定条件执行触发器操作
[DECLARE]
[PRAGMA AUTONOMOUS_TRANSACTION;] --自治事务声明
BEGIN
END;
在编写触发器时,要注意:
1)触发器的代码不能超过32KB,如果真的超过32KB,可以在触发器中使用CALL语句调用存储过程。
2)触发器代码只能包含SELECT、INSERT、UPDATE、DELETE,而不能包含DDL语句如CREATE、ALTER、DROP,也不能包含事务控制语句如COMMIT、ROLLBACK、SAVEPOINT。
3) 尽管触发器可以实现较多的功能,但是不过过度使用触发器,否则会导致系统变得难以维护,比如连锁触发,比如别人不知道这里有个触发器等等。
触发器功能
- 允许/限制对表、视图的操作
- 自动生成派生列
- 强制数据的一致性
- 强制复杂的完整性约束条件
- 提供审计和日志记录
- 防止无效的事务处理
- 启用复杂的业务逻辑
其他触发器语法