触发器
1.介绍
触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。
使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作 。
| 触发器类型 | NEW和 OLD |
|---|---|
| INSERT型触发器 | NEW表示将要或者已经新增的数据 |
| UPDATE型触发器 | OLD表示修改之前的数据, NEW表示将要或已经修改后的数据 |
| DELETE型触发器 | OLD表示将要或者已经删除的数据 |
2.语法
1)创建
1create trigger trigger_name
2before/after insert/update/delete
3on tbl_name for each row --行级触发器
4begin
5 trigger_stmt;
6end;
2)查看
1show triggers;
3)删除
1drop trigger [schema_name.]trigger_name; --如果没有指定schema_name,默认为当前数据库。
案例
1-- 通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中, 包含增加,修改 , 删除 ;
2
3-- 插入数据触发器
4create trigger tb_user_insert_trigger
5 after insert on tb_user for each row
6begin
7 insert into user_logs(id, operation, operate_time, operate_id, operate_params)
8 values(null,'insert',now(),new.id, concat('插入的数据内容为:
9id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',
10profession=', NEW.profession));
11end;
1-- 修改数据触发器
2
3create trigger tb_user_update_trigger
4 after update on tb_user for each row
5begin
6 insert into user_logs(id, operation, operate_time, operate_id, operate_params)values(null,'update',now(),new.id,concat('更新之前的数据:id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession, ' | 更新之后的数据: id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
7end;
1-- 删除数据触发器
2create trigger tb_user_delete_trigger
3 after delete on tb_user for each row
4begin
5 insert into user_logs(id, operation, operate_time, operate_id, operate_params)
6 value (null,'delete',now(),old.id,
7 concat('删除之前的数据: id=',old.id,',name=',old.name, ', phone=',old.phone, ', email=', old.email, ', profession=', old.profession));
8end;