`
wlh269
  • 浏览: 455767 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

触发器(一)

阅读更多
触发器--
是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:

1、 允许/限制对表的修改

2、 自动生成派生列,比如自增字段

3、 强制数据一致性

4、 提供审计和日志记录

5、 防止无效的事务处理

6、 启用复杂的业务逻辑


例子:

--创建表
create table employees(
employee_id number(4),
last_name varchar2(8),
first_name varchar2(8),
hire_date date,
job_id  number(4),
email varchar2(30),
department_id number(4),
salary number(4),
commission_pct number(4,2)
);

--创建触发器
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;

--插入语句
insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct)
values( 1234,'Chen','Donny', sysdate, 12, 'donny@hotmail.com',60,1000,.25);


--查询
select * from employees e where e.employee_id=1234;


结果发现commission_pct字段被触发器修改为0.0了!




触发器的组成部分:

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表






分享到:
评论

相关推荐

    RS、D、JK触发器实验报告.docx

    D触发器只有一个数据输入D,其输出Q的下一个状态(Qn+1)取决于当前时钟周期内的D输入状态(Qn=D)。D触发器通常具有边沿触发特性,这意味着只有在时钟脉冲的上升沿或下降沿,D输入的变化才会被捕捉并影响输出。...

    JK触发器构成的十二进制计数器.zip

    这些触发器通过级联方式连接,每个触发器的输出连接到下一个触发器的时钟输入,形成一个环形结构。这样,每个JK触发器的计数状态变化都会触发下一个触发器,从而实现从0000到1111的二进制计数,即十进制的0到15。 ...

    数电实验—实验3—JK触发器.pdf

    一、JK触发器的基本结构与工作原理 JK触发器由两个D触发器级联而成,通过内部的逻辑门电路实现了J和K输入的逻辑功能。其名称来源于"J"(Jump)和"K"(Kill),这两个输入分别控制触发器的状态转换。当J=1,K=0时,...

    verilogHDL电路设计触发器

    D触发器是一种更为常用的触发器类型,它具有单一的数据输入端和时钟输入端,并在每个时钟上升沿根据数据输入端的状态更新其输出状态。 #### 3.1 基本D触发器 一个简单的D触发器可以这样实现: ```verilog module D_...

    JK触发器 设计一个七进制计数器

    JK触发器是数字电路中的一种基本时序逻辑元件,它具有两种稳定状态,可以用来存储一位二进制信息。在本场景中,我们将利用JK触发器设计一个七进制计数器,即一个能从0计数到6,并在达到最大值后重新回到0的循环...

    触发器的一个例子触发器的一个例子

    根据给定的文件信息,我们可以了解到这是一篇关于数据库触发器的例子。触发器是数据库管理系统中的一个重要特性,它允许用户定义响应数据修改(如插入、更新或删除操作)时自动执行的一系列SQL语句。接下来,我们将...

    Multisim仿真实验三 触发器_触发器_multisimd触发器_serviceq66_T触发器仿真_double34t_源

    在实验中,我们重点关注D触发器,这是一种边沿触发的设备,其输出仅在时钟信号的上升沿或下降沿发生变化,且变化取决于输入D的状态。D触发器的主要功能是实现数据的无毛刺传输,确保在非触发时刻输出保持不变。 第...

    RS触发器与SR触发器区别有哪些

    RS触发器的一个显著特性是,当S和R输入同时为高电平“1”时,触发器将进入不确定的状态,一般认为这是一个不推荐的操作,因为它会导致输出不稳定。 SR触发器的命名规则与RS触发器相反,但功能上其实与RS触发器一致...

    SQL触发器

    - 名称:给触发器一个符合标识符规则的唯一名称。 - 表:触发器将作用于哪个表。 - 触发时机:何时触发,如INSERT、DELETE或UPDATE。 - 动作:触发时应执行的操作。 在SQL:99标准中,创建触发器的语法涉及`...

    JK触发器及D触发器构成计数型触发器

    基于Multisim14,绘制的JK触发器及D触发器构成计数型触发器仿真.

    mysql触发器之创建多个触发器操作实例分析

    在mysql 5.7.2+版本之前,我们只能为表中的事件创建一个触发器,例如,只能为BEFORE UPDATE或AFTER UPDATE事件创建一个触发器。 mysql 5.7.2+版本解决了这样限制,并允许我们为表中的相同事件和动作时间创建多个...

    Quartus 2 RS、D、JK、T、触发器实验报告 D触发器构成二分频、四分频电路

    - **四分频**:通过两个串联的D触发器,每个触发器在时钟脉冲下接收到反相的前一级输出,使得Q端的值每两个时钟周期翻转一次,因此输出频率为输入频率的四分之一。 6. **实验总结**: - 实验帮助理解了各种触发器...

    在DB2中创建第一个触发器

    在DB2中创建触发器是数据库管理中的一个重要环节,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)执行之前或之后自动运行预定义的SQL语句。本文将详细介绍如何在DB2数据库中创建一个触发器,以及触发器的...

    jk触发器波形图怎么画?主从jk触发器波形图

    JK触发器是一种广泛应用于数字电路设计中的基本单元,具有较强的通用性和稳定性。JK触发器的波形图绘制是理解其工作原理的关键步骤,尤其是在分析主从JK触发器的行为时。主从JK触发器由两个独立的JK触发器组成,一个...

    触发器触发器触发器触发器

    触发器是数据库管理系统中的一个重要概念,它是一种存储过程,能够在特定事件发生时自动执行,比如当数据被插入、更新或删除时。在本主题中,我们将深入探讨触发器的原理、类型、用法以及在实际数据库操作中的应用。...

    D触发器二分频电路图

    D触发器的特点是它只有一个数据输入端D,以及一个时钟输入端CLK。在时钟信号的上升沿或下降沿到来时,D触发器会将输入端的数据传输到输出端Q。D触发器可以被用作简单的存储单元,即一位寄存器。 #### 二、二分频的...

    触发器实验报告.doc

    触发器作为基础的存储元件,其核心特性在于它们能维持两种稳定状态,代表二进制的0和1,并在特定条件下能够从一种状态翻转至另一种状态。 1. **基本RS触发器**: RS触发器由两个与非门交叉耦合构成,提供置"0"(S=...

    RS触发器和SR触发器的区别

    RS触发器(Reset-Set Flip-Flop)和SR触发器(Set-Reset Flip-Flop)是数字电子学中非常基础的逻辑电路组件,它们属于触发器的一种类型。触发器是一种双稳态的存储设备,能够存储一位二进制数(0或1),并且在输入...

Global site tag (gtag.js) - Google Analytics