触发器
是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
开始
create trigger biufer_employees_department_id
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
when (new_value.department_id<>80 )
begin
:new_value.commission_pct :=0;
end;
/
触发器的组成部分:
1、 触发器名称
2、 触发语句
3、 触发器限制
4、 触发操作
1、 触发器名称
create trigger biufer_employees_department_id
命名习惯:
biufer(before insert update for each row)
employees 表名
department_id 列名
2、 触发语句
比如:
表或视图上的DML语句
DDL语句
数据库关闭或启动,startup shutdown 等等
before insert or update
of department_id
on employees
referencing old as old_value
new as new_value
for each row
说明:
1、 无论是否规定了department_id ,对employees表进行insert的时候
2、 对employees表的department_id列进行update的时候
3、 触发器限制
when (new_value.department_id<>80 )
限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
其中的new_value是代表更新之后的值。
4、 触发操作
是触发器的主体
begin
:new_value.commission_pct :=0;
end;
主体很简单,就是将更新后的commission_pct列置为0
触发:
insert into employees(employee_id,
last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )
values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);
select commission_pct from employees where employee_id=12345;
触发器不会通知用户,便改变了用户的输入值。
触发器类型:
1、 语句触发器
2、 行触发器
3、 INSTEAD OF 触发器
4、 系统条件触发器
5、 用户事件触发器
1、 语句触发器
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。
例子:
需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
Create table foo(a number);
Create trigger biud_foo
Before insert or update or delete
On foo
Begin
If user not in (‘DONNY’) then
Raise_application_error(-20001, ‘You don’t have access to modify this table.’);
End if;
End;
/
即使SYS,SYSTEM用户也不能修改foo表
[试验]
对修改表的时间、人物进行日志记录。
1、 建立试验表
create table employees_copy as select *from hr.employees
2、 建立日志表
create table employees_log(
who varchar2(30),
when date);
3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。
Create or replace trigger biud_employee_copy
Before insert or update or delete
On employees_copy
Begin
Insert into employees_log(
Who,when)
Values( user, sysdate);
End;
/
4、 测试
update employees_copy set salary= salary*1.1;
select *from employess_log;
5、 确定是哪个语句起作用?
即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?
可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断:
begin
if inserting then
-----
elsif updating then
-----
elsif deleting then
------
end if;
end;
if updating(‘COL1’) or updating(‘COL2’) then
------
end if;
[试验]
1、 修改日志表
alter table employees_log
add (action varchar2(20));
2、 修改触发器,以便记录语句类型。
Create or replace trigger biud_employee_copy
Before insert or update or delete
On employees_copy
Declare
L_action employees_log.action%type;
Begin
if inserting then
l_action:=’Insert’;
elsif updating then
l_action:=’Update’;
elsif deleting then
l_action:=’Delete’;
else
raise_application_error(-20001,’You should never ever get this error.’);
Insert into employees_log(
Who,action,when)
Values( user, l_action,sysdate);
End;
/
3、 测试
insert into employees_copy( employee_id, last_name, email, hire_date, job_id)
values(12345,’Chen’,’Donny@hotmail’,sysdate,12);
select *from employees_log
分享到:
相关推荐
SR脉冲触发器学习教案.pptx
触发器学习笔记 触发器是一种特殊的存储过程,它可以在数据库中自动执行某些操作,以维护数据的一致性和安全性。下面是触发器的详细介绍: 触发器的定义 触发器是数据库系统中的一种机制,它可以在数据库中自动...
D触发器学习教案.pptx
本学习笔记将着重探讨D触发器的原理、特性以及在FPGA时序设计中的应用,特别是亚稳态问题及其解决方案。 首先,D触发器的工作原理是基于时钟信号的上升沿(或下降沿,取决于触发器的设计)来捕捉并存储输入数据D,...
本学习资料主要针对想要深入理解和掌握SQL触发器的读者,对数据库管理和开发人员尤其有价值。 一、触发器的定义与分类 1. 定义:SQL触发器是一种数据库对象,它在满足特定条件时自动执行,这些条件通常与数据库表...
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
触发器学习 PLSQL 语言学习 触发器的使用 一个ppt文档
数据库的触发器的学习,一些基本的介绍,简单明了,还是很容易理解。
触发器学习教案 触发器是一种基本的数字电路元件,广泛应用于数字系统中。下面是触发器学习教案的知识点总结: 一、基本概念 * 触发器是一种具有记忆功能的数字电路元件,可以存储二进制信息。 * 触发器有多种...
《工学触发器学习教案》 触发器是数字电子电路中的基本元件,具有记忆功能,主要用来存储1位二进制信息。它分为两大类,一类是按触发方式分类,包括电平触发器、脉冲触发器和边沿触发器;另一类是按逻辑功能分类,...
总的来说,这个资料包提供了一个全面的触发器学习路径,从基本概念到高级应用,结合理论与实践,适合不同层次的学习者。通过学习这些材料,读者不仅可以理解触发器的工作原理,还能掌握如何在实际项目中有效利用...
对于更深入的SQL触发器学习,你可以通过邮件409376301@qq.com联系作者获取更多详细资料。 总之,SQL Server的触发器是实现数据完整性、业务规则和复杂逻辑的重要工具,但使用时需谨慎,以避免不必要的性能影响和...
MySQL触发器是数据库管理系统提供的一种机制,允许在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行一些预定义的SQL语句。在本例中,我们关注的是`AFTER INSERT`触发器,它在向`order`表中插入新记录后...
RS触发器和JK触发器的Multisim实现学习教案.pptx
理解这两者的区别,对于学习数字逻辑电路设计和分析是非常重要的。 RS触发器,全称为Reset-Set触发器,是一种具有两个输入信号端口的双稳态存储元件。所谓双稳态,意味着RS触发器可以稳定地存在于两种状态,即...