11MySQL触发器实战:用户操作日志审计系统
目录
mysql触发器
介绍
语法:
用户操作日志审计系统案例
mysql触发器
介绍
触发器是与表有关的数据库对象,指在 insert/ update/ delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名OLD 和NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发即for each row,不支持语句级触发。
语法:
创建触发器:
create trigger 触发器名
before/after insert/update/delete
on 指定表 for each row -- 行级触发器
begin
sql语句;
end;
- 在
INSERT
触发器中:只有NEW
有效,它包含了新插入的完整数据行。
查看触发器
show triggers;
删除触发器
drop trigger 触发器名;
用户操作日志审计系统案例
这段代码实现了一个完整的用户操作日志审计系统,能够自动记录users
表中数据的新增(INSERT)、修改(UPDATE)和删除(DELETE)操作,形成完整的操作轨迹。
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_parameters` varchar(500) DEFAULT NULL COMMENT '操作参数',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户操作日志表';create trigger users_insert_triggerafter insert on users for each row
begininsert into user_logs(id,operation,operate_time,operate_id,operate_parameters) values (null,'insert',now(),new.id,concat('插入的数据为:id:',new.id,',name:',new.name,',phone:',new.phone,',email:',new.email,',profession',new.profession));
end;create trigger users_update_triggerafter update on users for each row
begininsert into user_logs(id,operation,operate_time,operate_id,operate_parameters) 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;create trigger users_delete_triggerafter delete on users for each row
begininsert into user_logs(id,operation,operate_time,operate_id,operate_parameters) values (null,'delete',now(),old.id,concat('删除前的数据为:id:',old.id,',name:',old.name,',phone:',old.phone,',email:',old.email,',profession',old.profession));
end;INSERT INTO `users` (`id`, `name`, `phone`, `email`, `profession`, `age`, `gender`, `status`, `createtime`
)
VALUES (25, '二皇子', '18809091212', 'erhuangzi@163.com', '软件工程', 23, '1', '1', NOW()
);show triggers;drop trigger users_insert_trigger;update users set age = 32 where id =17;delete from users where id = 25;
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!