假设我们50 tables在数据库中,我们想要捕获每个表的列中的所有更改(列的上一个值和新值).将有一个审计表,其中包含以下列:
ID,Server_Name,User_Name,Date_Time,Table_Name,Column_Name,Old_Value,New_Value
将有一个审计表,它将捕获该数据库中所有表的更改.我相信我们可以为该数据库的每个表创建触发器.但请告诉我如何将所有数据添加到一个审计表中.如果您能为我提供一个非常有用的工作示例.
谢谢和问候,Partha
Him*_*waj 16
我可以为你提供一种算法,大部分基础工作已经完成:
这可以是您的审计表,应根据您的要求将时间戳列添加为修改日期或更多信息:
CREATE TABLE audit (
old_data VARCHAR(100),
new_data VARCHAR(100),
tbl_name VARCHAR(100)
)
|
Run Code Online (Sandbox Code Playgroud)
这可以用作参考触发器; 请注意,每个表都有一个单独的触发器:
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;
|
Run Code Online (Sandbox Code Playgroud)
每列可以有多个insert语句.如果要限制不插入未更改的数据,可以在触发器中执行以下更改:
IF(OLD.column_name <> NEW.column_name) THEN
--Your insert query here
ELSE
--NOOP
END IF;
Run Code Online (Sandbox Code Playgroud)
让我们知道是否需要更多信息.
| 归档时间: |
|
| 查看次数: |
21894 次 |
| 最近记录: |