`
danielhjd
  • 浏览: 243299 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

(trigger)触发器的定义和作用

阅读更多

第一:触发器(trigger)

触发器(trigger)是指隐含执行的存储过程procedure,当定义触发器时必须要指定触发事件和触发的操作,通常触发事件包括insert,update,delete语句,触发器实际上就是一个pl/sql(procedure language/Structured Query Language).create trigger来创建触发器;

 

第二:触发器的作用;

a.允许/限制对表的修改

b.自动派生列,如自增字段

c.强制数据的一致性

d.提供审计和日志记录

e.防止无效的事务处理

f.启动复杂的业务逻辑

 

第三:触发器的语法;

  

create or replace trigger temp_trigger ---定义一个触发器 temp_trigger
after|before|instead of                         ---指定触发时机和触发类型
insert|update|delete                            ---指定触发事件
of columns_name on table_name         ---of & on 监控的表单和表列
referencing
old as old_value
new as new_value
for each row|for each statement         ---指定触发次数(行和语句)
begin
codes
end;

 

instead of 是一种单独的出发机制,用来管理和执行view类型的数据表单

of &on 监控关键字 of 可以省区,on是必须留下的

 

第四:例子instance

 

a:创建一个行触发器 tri

create or replace trigger tri                   ---trigger tri
before insert or update on employee 
referencing old as old_value
                   new as new_value
for each row
when(new_value.empid<>'14')             ---当插入的empid不等于14
begin
:new_value.salary:=2001;                    ---将插入的的salary更改成2001
end;

 

触发事件:

insert into employee values(emp_seq.nextval,'Janney',10,'1');   ---插入一条数据

update employee set employee.empname='Alex' where employee.empid='12';  --根新empid=15的数据

结果:



分析:

对比发现,无论你修改或增加数据只要empid!=14,salary都固定在2001。
 

 b:创建一个语句触发器

  创建一表单 idiot

create table idiot(
i_id varchar2(255) primary key,
i_name varchar2(255),
i_add varchar2(255)
)

 

  创建触发器 tri_idiot

create or replace trigger tri_idiot
before update or insert on idiot
begin
if user not in ('hjd') then
Raise_application_error(-20001,'You don’t have access to modify this table.');
end if;
end;

 触发事件

insert into idiot values(idi_seq.nextval,'daniel','武汉');
insert into idiot values(idi_seq.nextval,'justin','武汉');
insert into idiot values(idi_seq.nextval,'alex','南昌');

 结果:

(在非hjd的用户下执行)



此处的trigger是控制权限的
 
c:创建一个触发器log修改操作人员和时间和行为

---复制一张表格 命名为tem_employee 为操作的表格--
create table tem_employee as select * from employee

  

--创建一张 tem_employee_log记录变化--
create table tem_employee_log(
l_who varchar2(50),
l_when date
)

   

---增加一column---
alter table tem_employee_log add(action varchar2(20));

  创建触发器 tri

create or replace trigger tri
before insert or update or delate on temp_employee
declare                                                          -----声明一变量
l_action tem_employee_log.action%type;
begin
if inserting then l_action:='insert';
elsif updating then l_action:='update';             --此处用elsif
elsif deleting then l_action:='delete';
else raise_application_error(-20001,'You should never ever get this error.');
end if;
insert into tem_employee_log values(user,sysdate,l_action);
end;

 

触发语句

delete from tem_employee where tem_employee.empid='4';

 结果:



 

 

  • 大小: 19.7 KB
  • 大小: 23.1 KB
  • 大小: 9.6 KB
  • 大小: 14.6 KB
  • 大小: 7.2 KB
分享到:
评论

相关推荐

    SQL Server数据库实验_存储过程与触发器设计.docx

    1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、...

    oracle触发器(trigger)[定义].pdf

    oracle触发器(trigger)[定义].pdf

    MySQL 触发器定义与用法简单实例

    本文实例讲述了MySQL 触发器定义与用法。分享给大家供大家参考,具体如下: 语法 CREATE TRIGGER 触发器名称 –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { ...

    mongodb-trigger:mongodb事件触发器

    mongodb-trigger类似关系数据库的触发器,mongodb-trigger同样可以监听操作事件,粒度可以达到字段级别。使用场景同步mongodb数据到异构存储,如:mongo -&gt; elasticsearch业务cache刷新,如:redis中镜像数据监听数据...

    数据库触发器

    主要讲解数据库中关于触发器的内容 触发器常用的功能 DML触发器 CREATE TRIGGER语法

    Oracle触发器trigger详解

    触发器的概念和第一个触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句。 每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的...

    Oraclet中的触发器

     触发器本身:即该TRIGGER 被触发之后的目的和意图,正是触发器本身要做的事情。 例如:PL/SQL 块。  触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。语句级...

    sqlserver 触发器学习(实现自动编号)

    总结常用基本点如下: 1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。 DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行...

    SQLServer2008数据库基础入门教程含思考题练习题 第11章 存储过程 触发器和函数 共62页.ppt

    本章将全面研究存储过程、触发器、用户定义函数等特点和使用方式。 【要点】 存储过程的特点、类型和作用 使用CREATE PROCEDURE语句创建存储过程 存储过程的执行方式 DML触发器的特点和创建方式 DML触发器的工作...

    sql触发器实例详细讲解

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为...

    实验六-触发器实验报告.doc

    建立触发器 CREATE [OR REPLACE] TRIGGER &lt;触发器名&gt; BEFORE"AFTER INSERT"DELETE"UPDATE OF &lt;列名&gt; ON &lt;表名&gt; [FOR EACH ROW] WHEN (&lt;条件&gt;) 程序块&gt; ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件...

    数据库——触发器基础知识

    触发器(trigger)是和表关联的特殊的存储过程,当数据库系统执行insert、update和delete事件时,会激活使其执行相应的操作。 2 创建和执行触发器 2.1 触发器中的 new和 old 在MySQL中用old和new表示触发器执行前和...

    mysql触发器之触发器的增删改查操作示例

    我们在创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义。触发器作为纯文本文件存储在以下数据库文件夹中: /data_folder/database_name/table_name.trg 我们还可通过查询information_schema数据库...

    数据库之—用触发器实现每个学生最多只能选择3门课程

    用触发器实现每个学生最多只能选择3门课程的代码如下: use 学生档案 go create trigger elective_restrict on 选课表 for insert, update as begin if update (课程号) begin declare @num varchar(10) declare...

    mysql触发器(Trigger)简明总结和使用实例

    2,官方定义触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的...

    触发器的总结

    描述了如何创建触发器,包括触发器的组成,触发条件,触发时机。

    学了这么久MySQL竟然还不知道视图和触发器!!!

    你可能直到创建数据库用create database 数据库名,你也可能知道创建表用create table 表名,今天就再让你多知道两个,创建视图用create view 视图名,创建触发器用create trigger 触发器名 视图 视图是什么,视图...

    K3触发器实现对物料单据管控 .txt

    CREATE trigger icstockbill_check --实现对物料单据管控 on Icstockbill for insert as Declare @Ftrantype int --单据类别定义/生产领料单24/调拔单41/销售出库单21 Select @Ftrantype=Ftrantype from ...

    mysql 触发器用法实例详解

     触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由程序调用,而是由某个...

    讲解SQL Server数据库的触发器安全隐患

    CREATE TRIGGER权限默认授予定义触发器的表所有者、sysadmin固定服务器角色成员以及db_owner和db_ddladmin固定数据库角色成员,并且不可转让。本文以动网论坛dvbbs为例介绍了SQL Server数据库的触发器安全隐患并提出...

Global site tag (gtag.js) - Google Analytics