我是靠谱客的博主 专注往事,最近开发中收集的这篇文章主要介绍触发器基本概念了解已经使用场景触发器应用场景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

触发器

  • 概念

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

  • 和表相关联,可以看作是表的一部分
    • 不能直接引用
    • 属于事物结构
    • 通过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;

 

最后

以上就是专注往事为你收集整理的触发器基本概念了解已经使用场景触发器应用场景的全部内容,希望文章能够帮你解决触发器基本概念了解已经使用场景触发器应用场景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部