作用:用来在某些操作时,“自动”执行一些操作,一张表最多能有6个触发器(3操作*2时间)
定义触发器:
语法:create +trigger+触发器名+ before/after +事件+on+表名+for each row +触发器语句
1、before|after 代表触发器语句执行时间,如果是before,就是在insert|delete|update操作之前执行触发器语句;after就是之后。
2、事件就是insert delete update操作中的一个。
3、for each row 是代表任何记录执行对应操作都会触发器
4、触发器语句就是触发器触发时要执行的语句
注意:时间中,after用的最多,还要多注意触发器重复的问题
多个触发语句:
需要将多条语句放在begin end中
语法:
delimiter @@
create trigger 触发器名 after/before insert/update/delete on 表名 for each row
begin
触发语句1;
触发语句2;
,,,,,触发语句n
end@@
delimiter;
触发器基本操作命令
show triggers;——查看所有触发器
drop trigger 触发器名——删除触发器
案例应用——银行账户的开户,存款,取款,销户
演示
-- 开户操作
-- create trigger sss after insert on tb_bank for each row
-- insert into tb_bank_action_history (action,action_money,bank_id)
-- values('开户',new.cash,new.id)
-- insert into tb_bank values(2,'明明',1000)
-- select*from tb_bank_action_history
效果:
-- 存取款操作
-- create trigger bbb after update on tb_bank for each row
-- insert into tb_bank_action_history(action,action_money,bank_id)
-- values(if(new.cash>old.cash,'存款','取款'),new.cash-old.cash,new.id)
-- 命令操作
-- update tb_bank set cash=cash+100 where id=1;
-- update tb_bank set cash=cash-200 where id=1;
-- 查询
-- select * from tb_bank_action_history;
效果:
-- 销户操作
-- create trigger trig_bank_his after delete on tb_bank for each row
--触发语句
-- insert into tb_bank_action_history(action,action_money,bank_id)
-- values('销户',0-old.cash,old.id);
-- 删除操作
-- delete from tb_bank where id=2;
-- 查询历史
-- select*from tb_bank_action_history
-- 查询触发器
-- show triggers;
效果