第一:触发器(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
分享到:
相关推荐
1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、...
oracle触发器(trigger)[定义].pdf
本文实例讲述了MySQL 触发器定义与用法。分享给大家供大家参考,具体如下: 语法 CREATE TRIGGER 触发器名称 –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { ...
mongodb-trigger类似关系数据库的触发器,mongodb-trigger同样可以监听操作事件,粒度可以达到字段级别。使用场景同步mongodb数据到异构存储,如:mongo -> elasticsearch业务cache刷新,如:redis中镜像数据监听数据...
主要讲解数据库中关于触发器的内容 触发器常用的功能 DML触发器 CREATE TRIGGER语法
触发器的概念和第一个触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句。 每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的...
触发器本身:即该TRIGGER 被触发之后的目的和意图,正是触发器本身要做的事情。 例如:PL/SQL 块。 触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。语句级...
总结常用基本点如下: 1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。 DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行...
本章将全面研究存储过程、触发器、用户定义函数等特点和使用方式。 【要点】 存储过程的特点、类型和作用 使用CREATE PROCEDURE语句创建存储过程 存储过程的执行方式 DML触发器的特点和创建方式 DML触发器的工作...
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为...
建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名> [FOR EACH ROW] WHEN (<条件>) 程序块> ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件...
触发器(trigger)是和表关联的特殊的存储过程,当数据库系统执行insert、update和delete事件时,会激活使其执行相应的操作。 2 创建和执行触发器 2.1 触发器中的 new和 old 在MySQL中用old和new表示触发器执行前和...
我们在创建触发器后,可以在包含触发器定义文件的数据文件夹中显示其定义。触发器作为纯文本文件存储在以下数据库文件夹中: /data_folder/database_name/table_name.trg 我们还可通过查询information_schema数据库...
用触发器实现每个学生最多只能选择3门课程的代码如下: use 学生档案 go create trigger elective_restrict on 选课表 for insert, update as begin if update (课程号) begin declare @num varchar(10) declare...
2,官方定义触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的...
描述了如何创建触发器,包括触发器的组成,触发条件,触发时机。
你可能直到创建数据库用create database 数据库名,你也可能知道创建表用create table 表名,今天就再让你多知道两个,创建视图用create view 视图名,创建触发器用create trigger 触发器名 视图 视图是什么,视图...
CREATE trigger icstockbill_check --实现对物料单据管控 on Icstockbill for insert as Declare @Ftrantype int --单据类别定义/生产领料单24/调拔单41/销售出库单21 Select @Ftrantype=Ftrantype from ...
触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由程序调用,而是由某个...
CREATE TRIGGER权限默认授予定义触发器的表所有者、sysadmin固定服务器角色成员以及db_owner和db_ddladmin固定数据库角色成员,并且不可转让。本文以动网论坛dvbbs为例介绍了SQL Server数据库的触发器安全隐患并提出...