通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中,包含增加,修改,删除。
表结构准备
根据日志表的需求,写出对应的表结构即可。
-- 准备工作 : 日志表 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;
插入数据触发器
代码
写触发器时,多注意插入的数据与日志表的结构相对应;NEW表示将要或者已经新增的数据。
create trigger tb_user_insert_trigger -- 触发器命名 after insert on tb_user for each row -- 插入型的触发器,数据取自after begin insert into user_logs( id, operation, operate_time, operate_id, operate_params) VALUES (null, 'insert', now(), NEW.id, -- NEW表示将要或者已经新增的数据,这里只需要取其id concat -- 拼接字符串,从NEW中取各自需要的信息 ('插入的数据内容为:id=',NEW.id,',name=',NEW.name,',phone=',NEW.phone,',email=', NEW.email, ',profession=', NEW.profession)); end;
测试
检查日志表中的数据是否可以正常插入,以及插入数据的正确性。
-- 查看 show triggers ; -- 插入数据到tb_user insert into tb_user( id, name, phone, email, profession, age, gender, status,createtime) VALUES ( 26,'三皇子','18809091212','erhuangzi@163.com','软件工程',23,'1','1',now());
修改数据触发器
代码
在修改数据触发器中,OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据。
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 profession = '会计' where id = 23; update tb_user set profession = '会计' where id <= 5;
删除数据触发器
代码
删除数据触发器中,OLD 表示将要或者已经删除的数据。
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 = 26;
END