触发器的四个应用场景:

1.复杂的安全性检查:比如:禁止在非工作时间插入新员工

2.数据库的确认:比如:涨工资,工资应该越长越多的,如果越长越少就不叫涨工资了

3.数据库审计:比如:跟踪表上操作的记录,比如什么时间什么人操作了数据库,操作了表上的 记录是什么等

4.数据库的备份和同步:比如有两个数据库一个在北京一个在上海,在北京的数据库是主数据库,在上海的数据库是备用数据库,在主数据库中的数据被修改了以后可以通过触发器监听,如果被修改会将修改的数据传递给备份数据库,当主数据崩溃以后不影响数据的使用

触发器使用场景一:

复杂的安全性检查

禁止在非工作时间插入新员工

–周末:select to_char(sysdate,‘day’) from dual in (‘星期六’,‘星期日’);

–上班前,下班后:select to_number(to_char(sysdate,‘hh24’)) not between 9 and 18;

–不管插入10个员工还是1个员工,插入操作都只是对表操作一次,所以使用语句级触发器

CREATE OR REPLACE trigger securityemp
​
before insert
​
on emp
​
begin
​if to_char(sysdate,'day') in ('星期六','星期日') or
​to_number(to_char(sysdate,'hh24'))not between 9 and 18 then
--禁止insert新员工raise_application_error(-20007,'禁止在非工作时间插入新员工');
​--自定义的错误代码比如在-20000-20009区间
​end if;
​
end;

执行如下插入语句时当不满足9:00-18:00之间或者在非周末时间会触发以上触发器

insert into emp(empno,ename,sal,deptno) values(1002,'Tom',3000,10);

触发器使用场景二:数据的确认

涨工资不能越涨越少

涨工资的时候可能给1个员工涨工资,也可能给很多个员工涨工资,对每一条记录都要做检查

所以要使用行级触发器

CREATE OR REPLACE trigger checksalary
​
before update --涨工资之前需要检查一下涨后的工资是否少于涨钱的工资
​
on emp
​
for each row
​
begin
​--if 张后的薪水<涨钱的薪水 then
​if :new.sal<:old.sal then
​raise_application_error(-20008,'涨后的薪水不能少于涨前的薪水,涨之后的薪水:'||:new.sal||' 涨之前的薪水:'||:old.sal);
​end if;
​
end;

–:ord和:new 他们代表的是同一条记录,

–:ord是表示操作该行之前,这一行的值

–:new是表示操作该行之后,这一行的值

执行下面更新语句不会触发触发器:

update emp set sal=sal+1 where empno=7839;

执行下面更新语句会触发触发器,因为修改后的工资比修改前要低

update emp set sal=sal-1 where empno=7839;

触发器使用场景三:数据库的审计—>基于值的审计功能

给员工涨工资,当涨后的薪水超过6000块钱的时候,我们审计该员工的信息

准备工作,创建一张表用于保存审计信息

create table audit_info_emp(
​
information  varchar2(200));

给涨工资的每个员工都需要触发该触发器,所以应使用行级触发器

CREATE OR REPLACE TRIGGER do_audit_emp_salary
​
after update
​
on emp
​
for each row
​
begin--当涨后的薪水大于6000,插入审计信息if:new.sal>6000 then
​insert into audit_info_epm values(:new.empno||' '||:new.ename||' '||:new.sal);
​
end if;
​
end;

使用如下更新语句给所以员工涨2000工资,涨薪后超过6000的员工会被写入审计表

update emp set sal=sal+2000;
​
commit;

触发器使用场景四:数据库的备用和同步

利用触发器实现数据的同步部分

准备工作:emp表:源数据表 emp_back表:模拟emp表的备份表

–不加where条件或者加了where条件为true为复制表结构及数据

CREATE table emp_back as select * FROM emp;

当给员工涨完工资后,自动备份新的工资到备份表中

由于每一位涨工资的员工都需要触发该触发器,所以也是使用行级触发器

CREATE OR REPLACE TRIGGER sync_salary
​
after update
​
on emp
​
for each row
​
begin
-- 当主表更新后,自动更新备份表update emp_back set sal=:new.sal where empno=:new.empno;
​
end;

使用如下更新语句会触发该触发器同步数据到备份表

update emp set sal=sal+10 where empno=7839;

触发器的四个应用场景相关推荐

  1. 触发器的四种应用场景

    触发器语法 CREATE [OR REPLACE] TRIGGER 触发器名称 {BEFORE|AFTER} {DELETE|INSERT|UPDATE[OF 列名]} ON 表名 [FOR EACH ...

  2. unity scence灯光不显示_Unity基础教程系列(四)——多场景(Loading Levels)

    目录 1 池场景 1.1 在运行时创建场景 1.2 把对象放入场景池 1.3 从重编译中恢复 2 关卡1 2.1 多场景编辑 2.2 场景灯光 2.3 在构建中包含多场景 2.4 加载场景 2.5 等 ...

  3. 触发器(四、执行顺序控制)

    Oracle11g开始提供了一个触发器顺序控制的功能,对于同时触发的多个触发器,可以用FOLLOWS语句来控制先后执行顺序. 但是FOLLOWS语法有一定的限制:只能用在同类型的多个触发器上 (bef ...

  4. 这四个问题场景你会排查原因吗?看看高手是如何使用 Arthas 快速定位原因的!...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 张奇(司楚) 当线上碰到头疼的问题时,还在对着 ...

  5. Unity(四):使用场景Ⅰ:建立类型映射

    在之前的一篇文章"Unity(三):快速入门"中,给出了一个简单的示例,让我们对Unity有一个感性的认识.但是,Unity到底是做什么用的呢?一个简单示例并不能解答这个问题. 总 ...

  6. 闲云野鹤:吃鸡(四)之场景制作—用unity内置草功能制作草

    先上最终效果图吧: 第一种方式:Add Grass Texture,只需要选择草的图片即可 选择Add Grass Texture此种方式unity默认mesh为一个矩形面.基本制作过程没什么值得多说 ...

  7. 迁移学习知识 - 迁移学习的四种应用场景

    迁移学习是在已知一个工况下进行训练,然后训练好的方法(模型)能够解决未知工况下的问题 因此包括四个方面 1.不同工况:等转速.负载.温度等工况不同时,其可能出现域偏移(domain shift).比如 ...

  8. 牛客网SQL刷题四-电商场景(某东商城)

    SQL13 计算商城中2021年每月的GMV 数据 DROP TABLE IF EXISTS tb_order_overall; CREATE TABLE tb_order_overall (id I ...

  9. 【三星官方教程】如何为Gear VR开发应用(四):场景连接

    场景连接 完成启动画面后,可以开始制作主场景了.主场景是一个 360 度照片查看器,可以用按钮来选择一系列的 360 度全景图片. 在本期教程中,你将学到: ·在Unity 项目中增加第二个场景 ·使 ...

最新文章

  1. fortran求解雷诺方程_方程的计算机处理94(5)_Cvs
  2. Quartz应用与集群原理分析
  3. 分糖果(信息学奥赛一本通-T1380)
  4. brew 基本使用方法
  5. (转)C#中的委托(Delegate)和事件(Event)
  6. PL/SQL TOAD 不安装Oracle客户端连接数据库的方法
  7. python中self和cls的区别
  8. php bin2hex 反向,PHP bin2hex()和pack()函数
  9. 管理类综合199资料整理
  10. JavaScript编程用法——JavaScript运行环境
  11. Unity-TA 成长之路(二)内置渲染管线-官方篇
  12. stm32的人体红外传感器的初步使用
  13. 同济大学Python程序设计基础 实验七:文件
  14. 这几天来的第一篇日志
  15. linux-FHS总结
  16. 5款不妨一试的硬盘碎片整理工具
  17. 全球十年来含金量最高护照阿联酋列榜首,超过111个国家免签
  18. Android P 通过FTM(Fine Time Measure) RTT(Round Trip Time) 实现室内定位
  19. win7 打开文件 计算机,如何在win7计算机上打开dat文件,如何在win7计算机上打开dat文件...
  20. rarLinux 安装及使用

热门文章

  1. NetApp 混合云技术
  2. [Python自动办公]利用中国移动企业邮箱发送邮件
  3. 动手开发自己的mvc-2----完善控制层,提供自动注入和注解上传等功能
  4. PC装苹果系统(详解)
  5. 涡河网(GuoHeNet.Cn)简介
  6. js根据数据关键字实现模糊查询功能
  7. 音视频探索(2):AAC编码解析
  8. python群发邮箱软件下载_python如何群发邮件
  9. 六一大放送: AI Studio精选用户项目推荐榜单
  10. 跨境市场下一个蓝海:区块链+跨境支付?