触发器基本概念了解已经使用场景

 

触发器

  • 概念

  • :触发器是一种特殊的存储过程,它被分配给某个特定的表,触发器都是自动调用的。当一特定的表数据被插入,更新或删除时,数据库需要执行一定的动作,触发器是确保数据完整性和一致性的基本有效的方法。

  • 和表相关联,可以看作是表的一部分
    • 不能直接引用
    • 属于事物结构
    • 通过insert/update/delete动作自动激活触发器
    • 同一类型的触发器在表上可以有多个
    • 作用:

  • 禁止无效的修改
  • 级联修改相关表格
  • 执行较为复杂的约束操作
  • 特点:

  • 不接受用户参数,也不返回用户参数;存储在表上。
  • 数据库中跨越相关表的的级联修改。
  • 对数据库的相关表进行级联更新和删除。
  • 强制比Check约束更复杂的数据完整性。可以引用其他表中的列。

创建触发器

  • 语法:
use 数据库名 
create trigger 触发器名 
on 表名 
for insert / delete /update
as 
触发器要执行的操作 
go

修改触发器:

  • 语法
use 数据库名 
alter trigger 触发器名 
on 表名 
for insert / delete /update 
as 
触发器要执行的操作 
go

启用/禁用/删除触发器

enable/disable/drop trigger 触发器名

工作方式

  • 当向表中插入数据时,insert触发器执行,新的纪录插入到触发器表和insert表中。当触发一个delete触发器时,被删除的表记录存放到delete表中。修改一条记录等于插入一条记录,同时删除旧记录,表中原始记录放在delete中,修改过的记录插入到inserted表中。

 

应用场景

  •  

    实现复杂的安全性检查

create or replace trigger mytrigger
before insert
on emp
begin
   if to_char(sysdate,'day') in ('星期六','星期日')
      or
         to_number(to_char(sysdate,'hh24')) not between 9 and 18
   then
   raise_application_error(-20001,'禁止插入新的员工');
   
   end if;
end;
  • 数据确认
create or replace trigger checksal
before update
on emp
for each row
begin
   if :new.sal < :old.sal
   then
   raise_application_error(-20002,'涨薪后的薪水不能低于原来的薪水,涨薪后薪水:'||:new.sal||' 原来薪水:'||:old.sal);
   
   end if;
end;
  • 数据备份
create table emp_back as select * from emp;
create or replace trigger sync_sal
after update
on emp
for each row
begin
   update emp_back set sal = :new.sal where empno = :new.empno;
end;

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页