详细的描述了MySQL中的触发器。
触发器简介
简介
触发器是与表有关的数据库对象,指在 insert / update / delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。
现在触发器还只支持行级触发(影响几行触发几次)
现在触发器不支持语句级触发(执行一条语句触发一次)
触发器类型 |
NEW 和 OLD |
INSERT触发器 |
NEW表示将要或者已经新增的数据 |
UPDATE型触发器 |
OLD表示修改之前的数据,NEW表示将要或已经修改后的数据 |
DELETE型触发器 |
OLD表示将要或者已经删除的数据 |
语法
创建
CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON tbl_name FOR EACH ROW --行级触发器 BEGIN trigger_stmt; END;
|
查看
删除
DROP TRIGGER [schema_name.]Jtrigger_name; --如果没有指定schema_name,默认为当前数据库。
|
INSERT 类型触发器样例
样例:
通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中,包含增加,修改,删除;、、
建表语句如下:
create table user_logs( id int(11) not null auto_increment, operation varchar(20) not null comment '操作类型, insert/update/delete', operate_time datetime not null comment '操作时间', operate_id int(11) not null comment '操作的ID', operate_params varchar(500) comment '操作参数', primary key(`id`) )engine=innodb default charset=utf8;
|
-- 插入数据时的触发器 create trigger tb_user_insert_trigger after insert on tb_user for each row begin insert into user_logs(id, operation, operate_time, operate_id, operate_params) values (null, 'insert', now(), new.id, concat('插入的数据内容为: id = ', new.id, ' name = ', new.name, ' phone = ', new.phone), ' email = ', new.email, ' profession = ', new.profession); end;
-- 查看触发器指令 show triggers;
-- 插入数据 insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime) values (25,'Wang','99999999999','wang-nine@gmail.com','计科',19,'1','1',now());
|
运行结果:
UPDATE 类型触发器样例
-- 更新数据时的触发器 create trigger tb_user_update_trigger after update on tb_user for each row begin 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)); end;
-- 查看触发器指令 show triggers;
-- 更新数据 update tb_user set age = 99 where id = 25;
|
运行结果:
DELETE 类型触发器样例
-- 删除数据时的触发器 create trigger tb_user_delete_trigger after delete on tb_user for each row begin insert into user_logs(id, operation, operate_time, operate_id, operate_params) values (null, 'delete', now(), old.id, concat('插入的数据内容为: id = ', old.id, ' name = ', old.name, ' phone = ', old.phone, ' email = ', old.email, ' profession = ', old.profession)); end;
-- 查看触发器指令 show triggers;
-- 删除数据 delete from tb_user where id = 25;
|
运行结果: