关系数据库里都会提供触发器技术。触发器在数据库里独立存在,与函数和存储过程不同,函数和存储过程都是要用户显示
的去调用,才会执行。触发器是当某个事件发生时,隐式的去执行。同时,我们应该知道触发器是不带参数的。
ORACLE 是指对表进行INSERT,UPDATE和DELETE操作或者是对视图进行类似的操作。
触发器分类:
(1)DML触发器
ORACLE可以在DML操作前或操作后进行级触发和语句级触发,这样的触发器叫做DML触发器。
(2)替代触发器
在 ORACLE 里,不能直接对由两个以上的表建立的视图进行操作,所以出现替代触发器。
(3)系统触发器
能够在 ORACLE 数据库系统的事件中进行触发事件,如控制ORACLE 系统的启动或关闭等,这种
ORACLE系统级别的触发器叫做系统触发器。
触发器组成:
触发事件:
引起创建的触发器被触发的事件。比如,我们比较常见的事件有:
DML语句(INSERT,UPDATE,DELETE),DDL语句(ALTER,CREATE,DROP),用户事件(退出数据库,登录数据库)等。
触发时间:
触发器在事件执行之前(BEFORE)或事件执行之后(AFTER)触发器执行。
触发操作:
触发器被触发后,具体要做得事情。比如,在某个表插入新数据后,操作另外一个表更新以下状态。
触发对象:
表、视图、模式、数据库。在这些对象上发生操作,才会执行触发器
触发条件:
就是在WHERE后加一些逻辑,达到触发业务效果。
触发频率:
触发频率就是触发器执行的次数。语句级(STATEMENT)触发器和行级(ROW)触发器,对应触发器影响一行或多行。
编写触发器注意事项:
触发器不接受参数;
一个表上最多可有 12 个触发器,但同一时间、同一事件、同一类型的触发器只能有一个;
一个表上的触发器越多,操作越频繁,性能受影响越大;
触发器的执行部分只能用 DML语句,不能使用 DDL 语句;
触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),因为当触发语句部分提交等时,触发器会跟随
进行同样的操作,触发器等于瞎忙活了半天,没有效果。
触发器主体中不能申明任何Long和blob变量;
以上三个触发器语法和使用情况不同,并不具备同一语法;