目录
通过触发器记录 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
学习自:黑马程序员——MySQL数据库课程