本文共 2392 字,大约阅读时间需要 7 分钟。
触发器是一种与数据库表相关的数据库对象,用于在 insert、update、delete 操作之前或之后,自动触发并执行定义的SQL语句集合。类似于JavaScript中的事件处理,触发器可以用来确保数据的完整性、执行日志记录、数据校验等任务。
触发器根据触发操作的类型主要分为以下几种:
NEW 来引用将要或已经插入的数据记录OLD 表示修改前的数据,NEW 表示修改后的数据OLD 来引用将要或已经删除的数据记录触发器的创建语法结构如下:
create trigger trigger_name before/after insert/update/delete on tbl_name [for each row] begin -- 触发器脚本内容 trigger_stmt;end$
create table emp_logs ( id int(11) not null auto_increment comment '日志ID', 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;
DELIMITER $$create trigger emp_logs_insert_trigger after insert on emp for each row begin insert into emp_logs ( id, operation, operate_time, operate_id, operate_params ) values ( null, 'insert', now(), new.id, concat('插入后(id:', new.id, ', name:', new.name, ', age:', new.age, ', salary:', new.salary, ')') );end $$DELIMITER ; DELIMITER $$create trigger emp_logs_update_trigger after update on emp for each row begin insert into emp_logs ( id, operation, operate_time, operate_id, operate_params ) values ( null, 'update', now(), new.id, concat('修改前(id:', old.id, ', name:', old.name, ', age:', old.age, ', salary:', old.salary, ') , 修改后(id:', new.id, ', name:', new.name, ', age:', new.age, ', salary:', new.salary, ')') );end $$DELIMITER ; DELIMITER $$create trigger emp_logs_delete_trigger after delete on emp for each row begin insert into emp_logs ( id, operation, operate_time, operate_id, operate_params ) values ( null, 'delete', now(), old.id, concat('删除前(id:', old.id, ', name:', old.name, ', age:', old.age, ', salary:', old.salary, ')') );end $$DELIMITER ; insert into emp(id, name, age, salary) values(null, '光明左使', 30, 3500);insert into emp(id, name, age, salary) values(null, '光明右使', 33, 3200);update emp set age = 39 where id = 3;delete from emp where id = 5;
删除触发器的语法结构如下:
drop trigger [schema_name.]trigger_name
如果没有指定 schema_name,则默认为当前数据库。
可以通过执行 show triggers 命令查看触发器的状态和相关信息。
show triggers;
转载地址:http://wedfk.baihongyu.com/