一、触发器的概念
触发器是一个特殊的存储过程。是一个与表相关联的、存储的PL/SQL程序。
作用:每当一个特定的数据操作语句(insert、update、delete,注意没有select)在指定的表上发出时,oracle自动地执行触发器中定义的语句序列。
二、触发器的类型
语句级的触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。
语句级触发器针对表,只会触发一次
行级的触发器
触发语句作用的每一条记录都被触发。在行级触发器中使用:old和:new伪记录变量,识别值的状态。如果有for each row就表示行级触发器。
如
insert into emp10 select * from emp where deptno=10;
会查出3条记录。
行级触发器针对行,有多少条记录就触发多少次。
三、第一个触发器
每当成功插入新员工后,自动打印一句话,"成功插入新员工"。单词trigger
例如:
create trigger saynewemp
after insert
on emp
declare
begin
dbms_output.put_line('成功插入新员工');
end;
/
四、触发器的具体应用场景
(1)复杂的安全性检查 --比如周末不允许操作数据库
(2)数据的确认 --涨后的工资大于涨前的工资
(3)数据库审计 --跟踪表上所做的数据操作,什么时间什么人操作了什么数据,操作的人是什么。基于值的审计
(4)数据的备份和同步 --异地备份,把主数据的数据自动同步到备数据库中
五、创建触发器的语法
create [or replace] trigger 触发器名
{before|after}
{delete|insert|update [of 列名]}
on 表名
[for each row [when 条件]]
plsql块
六、触发器的案例
触发器案例一:禁止在非工作时间插入数据
触发器案例二:涨工资不能越涨越少
:old
和:new
的使用要注意。触发器案例三:创建基于值的触发器
触发器案例四:数据库的备份和同步 --利用触发器实现数据的同步备份,多用于异地分布式数据库