10.触发器

触发器: trigger
create trigger 触发器名 after/before insert/update/delete
on 表名 for each row
sql (非查询语句);

例:监听学生表,如果某个学生被更新了就将系部表中4号系的人数加1

create trigger tri_a after update on t_student
for each row
update t_dept set dnum=dnum+1 where did = 4;


同一个事件只能有一个触发器。
insert update delete 每个语句两个事件 before after
即一张表最多6个触发器。

例: 监听学生表,如果有学生被删除 就去系部表中将这个学生所在的系
的人数减一。

create trigger tri_b after delete on t_student
for each row
update t_dept set dnum = dnum-1 where did = old.did;

create trigger tri_c after insert on t_student
for each row
update t_dept set dnum = dnum + 1 where did = new.did;


create trigger tri_e after delete on t_student
for each row
insert into t_abc(id,name,ename,age) values(old.sid,old.sname,old.sename,old.sage);


delete触发器中会隐藏一张old虚拟的表,这个表中的数据就是刚刚删除的数据.
insert触发器中会隐藏一张new虚拟的表,这个表中的数据就是刚刚添加的数据
update触发器中会隐藏一张new虚拟的表和一张old虚拟的表,

触发器类似与Java的监听机制

after/before 触发以后/触发以前

Create trigger 触发器名 after/before insert/update/delete on 被检测的表
For each row
Sql 语句(不包含查询语句);

原文地址:https://www.cnblogs.com/makalochen/p/10656602.html