一尘不染

创建触发器以将数据添加到审核表

mysql

假设我们已经50 tables在数据库中,并且想要捕获跨每个表的列的所有更改(列的先前值和新值)。审核表将在此处,其中包含以下列:

IDServer_NameUser_NameDate_TimeTable_NameColumn_NameOld_ValueNew_Value

将有一个审计表,它将捕获该数据库中所有表的更改。我相信我们可以为该数据库的每个表创建触发器。但是,请让我知道如何将所有数据添加到一个审核表中。如果您可以为我提供一个可行的示例,将非常有帮助。

谢谢,帕萨


阅读 274

收藏
2020-05-17

共1个答案

一尘不染

我可以为您提供一种算法,大多数基础工作已经完成:

这可以是您的审核表,应根据您的要求添加时间戳列作为修改日期或更多信息:

CREATE TABLE audit (
     old_data VARCHAR(100),
     new_data VARCHAR(100),
     tbl_name VARCHAR(100)
)
|

可以用作参考触发;请注意,每个表都会有一个单独的触发器:

CREATE TRIGGER testtrigger BEFORE UPDATE ON <table_name>
  FOR EACH ROW BEGIN
    INSERT INTO audit(old_data, new_data, tbl_name) VALUES (OLD.first_name, NEW.first_name, "testtable");
  END;
|

每一列可以有多个插入语句。如果要限制不插入未更改的数据,则可以在触发器中进行以下更改:

IF(OLD.column_name <> NEW.column_name) THEN
    --Your insert query here
ELSE
    --NOOP
END IF;

让我们知道是否需要更多信息。

2020-05-17