目录
触发器是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
触发器类型有:insert触发器、delete触发器、update触发器。
创建触发器语法:
- create trigger 触发器名 触发时机 触发事件 on 表 for each row
- begin
- -- 触发器业务代码
- end;
- 触发事件:insert、update、delete
- 触发时机:before(触发事件之前)、after(触发事件之后)
- for each row:对于其中的每个数据行,只要符合触发条件,均激活一次,也就是行级触发器。(oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。但mysql不支持语句触发器,所以必须写for each row)
实例:使用触发器实现dept表与emp表的级联删除(即:当删除dept表中的一条记录时,同时将emp表中的相关记录一起删除)。
- drop trigger if exists dept_del;
- create trigger dept_del after delete on dept for each row
- begin
- delete from emp where deptno=old.deptno;
- end;
- new.deptno:向dept表中插入记录时的主键。
- old.deptno:删除dept表中记录时的主键。
注意:如果dept表与emp表建立了主外键约束,那么触发时机应为 before。
删除触发器语法:
drop trigger 触发器名;
删除dept_del触发器:
drop trigger dept_del;
查看数据库中的所有触发器:
show triggers;