DML触发器:DML语句(INSERT/DELETE/UPDATE)进行触发,可以在DML语句操作前或操作后进行触发,也可以对每行或语句进行触发。
替代触发器:由于不能直接操作有2个或以上的表构建的视图,由替代触发器处理这种视图。
系统触发器:Oracle提供的针对数据库系统事件的触发器,例如Oracle的启动/关闭。(Oracle提供的第三类触发器)
触发器组成:
1)触发事件:DDL/DML语句、数据库系统事件(DBMS启动/关闭、异常错误)、用户事件(登录/退出数据库)
2)触发时间:触发器、触发事件的执行顺序,BEFORE / AFTER。
3)触发操作:触发器被触发之后执行的操作。
4)触发对象:表、视图、模式(用户)、数据库,只有在这些对象上发送了符合触发条件的触发事件。
5)触发条件:WHERE子句指定一个逻辑表达式,当该表达式为TRUE时,遇到触发事件才会自动执行触发器,使其执行触发操作。
6)触发频率:语句级触发器、行级触发器。
触发器_注意类型
1)触发器不接受参数
2)一个表最多可以有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个,且各个触发器之间不能有矛盾。
3)一个表上的触发器越多,对该表上DML语句操作的性能影响就越大。
4)触发器的执行部分只能用DML语句(INSERT/DELETE/UPDATE/SELECT),不能用DDL语句(CREATE/DROP/ALTER)
5)触发器中不能包含事物控制语句。因为触发器是触发语句的一部分,触发语句被提交、回滚时,触发器也被提交、回滚。
6)触发器主体中调用的任何函数、过程,都不能使用事务控制语句。
创建触发器:
CREATE OR REPLACE TRIGGER trigger_name IS
{BEFORE | AFTER}
{INSERT | DELETE | UPDATE} ON {tb_name | view_name}