语法讲解------触发器的构建语法:
create [or replace] trigger trigger_name before|after event1 [ or event2 or event3 …] on table_name [for each row] begin statement; … end;
event通常是insert、delete或update等DML操作。
for example:
1.先创建一张表,用来记录emp2上的操作:
create table emp2_log( uname varchar2(20), action varchar2(10), atime date );
2.然后创建触发器:
create or replace trigger trig after insert or delete or update on emp2 begin if inserting then insert into emp2_log values(USER,'insert',sysdate); elsif updating then insert into emp2_log values(USER,'update',sysdate); elsif deleting then insert into emp2_log values(USER,'delete',sysdate); end if; end;
概述:
1.触发器分为语句级触发器和行级触发器
2.语句级触发器是指每执行一条DML语句,该触发器就执行一次
3.行级触发器是指每个DML操作影响几条记录,就会触发几次
4.行级触发器中由于涉及到了每条记录的数据变动,所以对于每条记录的数据来说就有新值和旧值之分:
用关键字:NEW和:OLD来代表新的记录和旧的记录(可用于制作自增长ID)。
for example:
解决完整性外键约束的例子:
1.由于数据完整性所以执行:
update dept set deptno = 99 where deptno = 10;
时因为emp表中的外键关系所以报外键的错误。
2.可以使用触发器顺利执行:
create or replace trigger trig after update on dept for each row begin update emp set deptno =:NEW.depno where deptno = :OLD.deptno; end;
因为触发器执行完毕后,数据库才会检查完整性的约束条件。