mysql - MySQL中的表发生任何更改后如何执行操作?
问题描述
我想将表数据更改审计到 audit_log 表中。假设我有两个表:audit_log 和 test_table。每当有新条目进入 test_table 时,audit_log 表应该记录新添加的数据。更新和删除操作也是如此。我尝试使用效果很好的触发器,但为此,我必须为单个表编写三个触发器。
更新触发器:
CREATE TRIGGER `trig_test_table_update` AFTER UPDATE ON `test_table` FOR EACH ROW BEGIN
DECLARE var_reason varchar(250);
DECLARE var_updated_by varchar(100);
DECLARE var_table_name varchar(150);
DECLARE var_record_id int(11);
DECLARE var_updated_by_role int(11);
DECLARE var_updated_on datetime;
SET var_reason = NEW.update_reason;
SET var_updated_by = NEW.updated_by;
SET var_updated_by_role = NEW.updated_by_role;
SET var_table_name = 'test_table';
SET var_record_id = NEW.test_table_id;
SET var_updated_on = now();
IF NEW.category <> OLD.category THEN
INSERT INTO audit_log(table_name,record_id,field_name,old_value,new_value,update_reason,updated_from_screen,updated_by,updated_on,update_by_role)
VALUES (var_table_name,var_record_id,'category',OLD.category,NEW.category,var_reason,NEW.updated_from_screen,
var_updated_by,var_updated_on,var_updated_by_role);
END IF;
END
这很好用,但我必须为我不想要的插入和删除操作创建另一个触发器。MySQL中是否有任何解决方案可以通过它在单个文件中处理插入、更新和删除操作?或者有什么我们可以做的技巧吗?提前致谢。
解决方案
推荐阅读
- php - 创建日志表以注册记录 MySql PHP
- python - 如何解决函数的 tkinter“pyimage4”错误?
- java - IndexOF 没有错,但我 :)
- mysql - 如何在mysql中复制CountA函数
- scala - 用于检查 kafka 代理(服务器)是否可用的 Scala 代码
- c++ - 使用estimateAffinePartial2D 可能导致内存损坏
- javascript - 如何在悬停时更改 SVG 的笔触颜色?
- python - 如何使用 selenium 和 python 来点击这种类型的子菜单链接
- reactjs - Ant Design Form 中的输入元素非常慢
- c++ - 可以用模板替换类类型信息宏吗?