关于触发器,我想说点什么

今天。。。。。

话不多说,开始正题!!

说到触发器,咱们先说一下,触发器是用来做什么的!

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

数据库触发器有以下的作用:

  1. 安全性。可以基于数据库的值使用户具有操作数据库的某种权利。

  2.  审计。可以跟踪用户对数据库的操作。   

  3.  实现复杂的数据完整性规则。

  4.  实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。

  5.  同步实时地复制表中的数据。

  6.  自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。

 

看完上面的介绍,大家都已经对触发器有所了解;再来说说,触发器是怎么使用的。

  • 语法(MySQL)
DELIMITER ;;    --小编这里用的是两个分号,也可以用其他的不常用的符号;比如:$
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW     --表示每一行的影响都会执行该触发器,不加则表示执行一次事务操作(不管是增删改多少条数据)只会执行一次该触发器
declare --声明变量操作
trigger_stmt
DELIMITER ;;
  • 语法(Oracle)
create or replace trigger trigger_name
  before insert or update or delete
  on salgrade 
  for each row    --表示每一行的影响都会执行该触发器,不加则表示执行一次事务操作(不管是增删改多少条数据)只会执行一次该触发器
declare --声明变量操作(变量名在前,类型在后)
begin 
trigger_stmt
end trigger_name;

trigger_name:标识触发器名称,用户自行指定。

trigger_time:标识触发时机,取值为 BEFORE 或 AFTER。

trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE。

tbl_name:标识建立触发器的表名,那张表的修改会执行该触发器。

trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句,多条数据用分号分割。

DELIMITER 的意思就是分号,后面跟的符号表示(第一次出现表示触发器的开始,第二次出现表示触发器的结束;因为在触发器中也会有分号,所以MySQL就用这个符号来表示开始和结束,避免和触发器中的符号冲突)

  •  new 和 old (:old 和 :new oracle 中)关键字的使用

在 oracle 中使用 :new.列名 或者 :old.列名 获取该列的值,或者给该列赋值;在 MySQL 中 使用 new.列名 或者 old.列名 获取该列的值,或者给该列赋值

在 Oracle 中用 :old 和 :new 表示执行前的行,和执行后的行。在 MySQL 中用 old 和 new 表示执行前和执行后的数据。

在对 new 赋值的时候只能在触发器 before 中只用,在 after 中是不能使用的

insert 时候使用 new

delete 时候用 old

update 时候 new 和 old 都可以用

posted @ 2018-02-23 09:33  chbyiming  阅读(115)  评论(0编辑  收藏  举报