`
danielhjd
  • 浏览: 246355 次
  • 性别: 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
分享到:
评论

相关推荐

    mysqltrigger触发器.pdf

    触发器是一种存储过程,它允许用户定义响应特定事件(如插入、更新或删除记录)时自动执行的操作。通过触发器,开发人员能够确保数据库完整性,实现复杂的业务逻辑,并监控数据变化。 #### 触发器基本语法及组成...

    数据可存储过程和触发器定义和使用

    本文将深入探讨这两个概念,以及如何在实际环境中定义和使用它们。 首先,存储过程是一种预编译的SQL语句集合,它可以封装一系列的数据库操作,并作为一个单元进行调用。存储过程有以下优点: 1. **提高性能**:...

    Gbase 8s触发器介绍.doc

    GBase 8s 触发器介绍 GBase 8s 触发器是一种存储过程,可以在进行 DML/DQL 操作时自动执行相应的语句。触发器可以用于维护多...在修改触发器时,需要注意触发器的名称、触发事件、目标表、触发时间和触发条件等信息。

    Go-go-trigger-golang的全局事件触发器

    总的来说,Go-trigger作为Golang的全局事件触发器,提供了一种高效且灵活的方式来管理和触发事件。它促进了代码的解耦,提高了模块间的协作效率,同时也降低了系统复杂性。对于任何需要处理异步事件或构建事件驱动...

    springTrigger 触发器

    在Spring配置文件中,我们需要定义`JobDetail`和`Trigger`。`JobDetail`定义了具体的任务,包括任务类名、任务参数等;`Trigger`则定义了任务的执行策略。例如: ```xml * * * ?"/&gt; ``` 在上述...

    数据库的触发器的创建和使用

    INSTEAD OF 触发器将在数据变动以前被触发,并取代变动数据的操作,而去执行触发器定义的操作。 触发器的创建和使用 创建触发器需要使用 CREATE TRIGGER 语句,并指定触发器的名称、类型和执行的 SQL 语句。例如:...

    配置IBM WEBSPHERE MQ触发器

    例如,`display trigger`命令用于查看当前的触发器设置,`set trigger`用于修改触发器参数,而`remove trigger`则用于删除不再需要的触发器。 总之,IBM WebSphere MQ的触发器功能提供了一种强大的机制,能够在消息...

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

    这些实例展示了如何根据不同的操作类型(INSERT、UPDATE、DELETE)和时间点(BEFORE、AFTER)来定义触发器,并通过`new`和`old`关键字访问新旧值,实现数据同步。 **注意事项** - 一个表上的相同事件不能有两个...

    在DB2中创建第一个触发器

    此触发器的作用是在更新`CheckingBalance`字段时检查是否会导致余额为负,如果会,则回滚该操作,避免过账。 ### 触发器注意事项 - **权限问题**:创建触发器的用户必须具有相应的权限,通常是数据库管理员。 - **...

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

    触发器常用于增强数据的完整性约束和实施复杂的业务规则。 创建触发器的SQL语法如下: ```sql DELIMITER | CREATE TRIGGER `&lt;databaseName&gt;`.`&lt;triggerName&gt;` [BEFORE | AFTER] [INSERT | UPDATE | DELETE] ON `...

    oracle触发器的创建与使用

    在Oracle中,查看、编辑、重命名和删除触发器同样使用类似的操作,如`SELECT * FROM USER_TRIGGERS`来查看触发器,`ALTER TRIGGER`用于编辑,`RENAME TRIGGER`用于重命名,`DROP TRIGGER`用于删除。 通过学习和掌握...

    触发器,trigger

    - **DDL事件触发器**:这类触发器是在数据定义语言(Data Definition Language, DDL)事件发生时被激活的,例如`CREATE`(创建)、`ALTER`(修改)和`DROP`(删除)数据库对象的操作。 - **数据库事件触发器**:这类...

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

    触发器的定义可以存储在数据目录下的特定数据库和表文件夹中,如 `/data_folder/database_name/table_name.trg`。此外,也可以通过查询`information_schema`数据库中的`triggers`表来查看触发器的相关信息,包括...

    触发器学习笔记

    触发器的定义 触发器是数据库系统中的一种机制,它可以在数据库中自动执行某些操作,以维护数据的一致性和安全性。触发器可以在数据库中执行各种操作,如insert、update、delete等。 触发器的原理 触发器的原理是...

    SQL 200n和商用(对象-)关系DBMS中的触发器.pdf

    在SQL 200n标准中,触发器是与某一基表相关联的对象,其语法定义如下:&lt;触发器定义&gt; ::= CREATE TRIGGER &lt;触发器名称&gt; &lt;触发动作时间&gt;&lt;触发器体&gt;。触发器的执行模型分为三个阶段:事件检测、触发器执行和触发器结束...

    oracle触发器(trigger).pdf

    编写触发器时,为了更好地维护和调试,通常建议使用分隔符(`DELIMITER`)来定义PL/SQL代码块的开始和结束,使得触发器定义在数据库中更加清晰。 触发器的应用实例在给定内容中提及了对员工表(employees)和部门ID...

    触发器和用户自定义函数

    总之,触发器和用户定义函数是数据库管理系统中两个强大的特性,它们能够显著增强数据库的功能性和灵活性,帮助开发者实现复杂的数据处理和管理需求。无论是确保数据一致性,还是扩展数据库的能力以满足特定的应用...

    触发器(trigger)1

    - `trigger_event` 定义触发触发器的具体事件,可以是 `INSERT`、`UPDATE` 或 `DELETE`。 - `tbl_name` 是触发器关联的表名,必须是永久性表,不能是临时表或视图。 - `trigger_stmt` 是触发器执行的SQL语句,可以是...

    申报专业技术资格考评课教案:RS触发器定义.pdf

    RS触发器,全称为Reset Set Trigger,是数字电子技术中的基本存储元件,具有记忆功能,能够存储一位二进制数据。它由逻辑门电路组成,能够保持稳定状态,直到受到特定输入信号的影响才会改变状态。RS触发器有两个...

Global site tag (gtag.js) - Google Analytics