SQL触发器:
触发器主要是通过事件进行触发被自动调用执行的,用触发器也可以存储数据,比如在你
删除某条记录时,可以使用触发器将这条数据先保留下来,所以触发器是一种特殊类型的存
储过程,而存储过程通过存储过程的名称调用的。
SQL触发器的优点:
1.可以通过数据库实现级联更改
2,可以定义更为严格的约束,
3,一个表中的多个触发器允许采取多个不同的对策响应同一个修改的语句
分类:
1,DML触发器---就是由DML(DML(Data Manipulation Language)数据操纵语言命令使用
户能够查询数据库以及操作已有数据库中的数据。基本的数据操作分成两类四种:检索(查询)
和更新(插入、删除、修改))语句触发的,像insert,update,delete,由于操作时间的不同
,也可以分为before和after触发器,
2,instead of触发器---用于执行一个替代操作来代替触发器时间的操作
3,系统事件触发器--像在数据库启动,关闭等时触发的
4,DDL触发器--DDL(数据库模式定义语言DDL(Data Definition Language),是用于描
述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述
定义。这些定义包括结构定义、操作方法定义等),像create,alter,drop语句,
编写触发器注意的问题:
1,一个表里最多有12个触发器,但是同一时间,同一事件,同一类型的触发器只能有一个
,并且各触发器之间不能有矛盾
2,一个表里的触发器越多,对该表的DML操作的性能影响就越大
3,触发器最大是32k
触发器的组成:
1,触发器的定义:
2,触发器要触发的时间,
3,触发器在被触发之后要执行什么动作
具体如下:
写一个触发器:其中tr_emp是新建的触发器的名字,
create or replace trigger tr_emp
before delete --要出发的时间
on emp
for each row
begin --在触发后,执行的动作,
insert into empcopy values(:old.empno,:old.job,:old.hiredate,:old.comm,:old.deptno);
end;
删除触发器:
drop trigger tr_emp;
其中: 1,for each row是行级触发器,举个例子说,如果你要删除部门号是10的人,要触
发器,保存你删除的记录,则触发器就会每一行的进行比较,知道没有符合条件的记录时,
如果没有这一句,就会执行一次,
2,:new --为一个引用最新的列值;
:old --为一个引用以前的列值;