假设我们已经50 tables在数据库中,并且想要捕获跨每个表的列的所有更改(列的先前值和新值)。审核表将在此处,其中包含以下列:
50 tables
ID,Server_Name,User_Name,Date_Time,Table_Name,Column_Name,Old_Value,New_Value
ID
Server_Name
User_Name
Date_Time
Table_Name
Column_Name
Old_Value
New_Value
将有一个审计表,它将捕获该数据库中所有表的更改。我相信我们可以为该数据库的每个表创建触发器。但是,请让我知道如何将所有数据添加到一个审核表中。如果您可以为我提供一个可行的示例,将非常有帮助。
谢谢,帕萨
我可以为您提供一种算法,大多数基础工作已经完成:
这可以是您的审核表,应根据您的要求添加时间戳列作为修改日期或更多信息:
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;
让我们知道是否需要更多信息。