首页 > 解决方案 > 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中是否有任何解决方案可以通过它在单个文件中处理插入、更新和删除操作?或者有什么我们可以做的技巧吗?提前致谢。

标签: mysqltriggers

解决方案


推荐阅读