触发器Trigger介绍

来源:互联网 发布:淘宝注册商家 编辑:程序博客网 时间:2024/05/29 06:55
触发器简介


        触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;
        通过触发器(Trigger)可以实现对某些表的监控,当监控表数据有新增、删除、修改的操作的时候,可以实现用户自定义的功能,比如:当基础表发生变化时,以基础表为基准的接口表数据的一致性维护;
触发器基础语法


create or replace trigger [触发器名称]
  <after|before|instead of >  <insert | update | delete>  of [字段] on [表名]
  for each row
declare
           [变量声明 ]
begin
           [执行代码 ]
end;


解说:1.触发器监控的动作 insert \update \delete ,其中如果监听多个动作,则使用 or 连接;
            2.监听的表 用 [on 表名]   形式,如果监听一个字段,则 [of 字段 on 表名 ]  ;如果所有字段都监听,则 [ on 表名],可以没有of 字段;
            3.for each row 是行级触发器的标志;如果是行级触发器,DML执行每条记录都会执行触发器,如果是语句级触发器则是一条语句执行一次触发器;
            4.<after | before | instead of > 标示触发器与DML语句的执行前后关系,After 指DML实施后触发器才会执行,Before是指在DML语句执行实施之前触发器则先执行,而Instead of一般是用于更新视图的;
            5.触发器的命名规范:
      Trigger_name = tableName_trg_<R|S><A|B|I><I|U|D>
      触发器名限于30个字符。必须缩写表名,以便附加触发器属性信息。
      <R|S>基于行级(row)还是语句级(statement)的触发器
      <A|B|I>after, before或者是instead of触发器
      <I|U|D>触发事件是insert,update还是delete。
触发器小实例


以下触发器实现对表userinfo的监听,如果表数据有 insert、update、delete操作则调用触发器;但是只有新增的记录或者是修改用户名称uname字段的时候,才会执行代码段;将修改或者新增的记录信息更新到表userLogInfo中;


create or replace trigger userinfo_trg
  after insert or update or delete on userinfo
  for each row
declare
  v_num varchar(10);
begin
  if :old.uname <> :new.uname or :old.ucode is null then  
  --只有当用户名称修改或者新增时,才会执行触发器
    select count(*) into v_num from userLogInfo us;
    if v_num <> 0 then--如果没有这个记录,则不删除
      delete from userLogInfo us where us.ucode = :new.ucode;
    end if;
    insert into userLogInfo
      (ucode, Newnname, Oldnname, Newphone)
    values
      (:new.ucode, :new.uname, :old.uname, :new.uphonne);  
  end if;
end;
1 0
原创粉丝点击