在多个表上触发并将其更新为单列
Triggers on multiple tables and update it into single column
我有一个关于更新员工表格的要求。我必须跟踪用户更新了哪些字段。我们正在保存的员工表格共有 6 tables。
当用户更新任何列时,我想跟踪他更改的旧值和新值。
为此,我创建了一个审计日志 table,因为我保留了 id、employee_id、table_name、old_value、[=22 等字段=]
所以假设用户在员工表单中编辑两列,即名字和姓氏。我想将这两条记录分别保存在两个不同行的旧值列中。即在第一个记录中,它应该得到名字,在第二个记录中它应该得到姓氏。
& 我更改的任何列与 6 个 table 中的任何一个相关,然后它应该在我的触发器 table 中更新
请建议我如何获得此查询
下面我写了一个基本的触发器
CREATE TRIGGER advance_audit
BEFORE UPDATE ON employee
FOR EACH ROW
INSERT INTO employees_audit
SET action = 'update', old_name= OLD.firstname, old_name = OLD.lastname;
CREATE TRIGGER advance_audit
AFTER UPDATE ON employee
FOR EACH ROW
BEGIN
IF NEW.firstname <> OLD.firstname THEN
INSERT INTO employees_audit (action, column_name, old_name, new_name, operator)
VALUES ('update', 'firstname', OLD.firstname, NEW.firstname, SYSTEM_USER());
END IF;
IF NEW.lastname <> OLD.lastname THEN
INSERT INTO employees_audit (action, column_name, old_name, new_name, operator)
VALUES ('update', 'lastname', OLD.lastname, NEW.lastname, SYSTEM_USER());
END IF;
-- the same blocks for each another column to be audited
END
使用AFTER触发器。查询失败不会存入日志
我有一个关于更新员工表格的要求。我必须跟踪用户更新了哪些字段。我们正在保存的员工表格共有 6 tables。 当用户更新任何列时,我想跟踪他更改的旧值和新值。
为此,我创建了一个审计日志 table,因为我保留了 id、employee_id、table_name、old_value、[=22 等字段=]
所以假设用户在员工表单中编辑两列,即名字和姓氏。我想将这两条记录分别保存在两个不同行的旧值列中。即在第一个记录中,它应该得到名字,在第二个记录中它应该得到姓氏。 & 我更改的任何列与 6 个 table 中的任何一个相关,然后它应该在我的触发器 table 中更新 请建议我如何获得此查询
下面我写了一个基本的触发器
CREATE TRIGGER advance_audit
BEFORE UPDATE ON employee
FOR EACH ROW
INSERT INTO employees_audit
SET action = 'update', old_name= OLD.firstname, old_name = OLD.lastname;
CREATE TRIGGER advance_audit
AFTER UPDATE ON employee
FOR EACH ROW
BEGIN
IF NEW.firstname <> OLD.firstname THEN
INSERT INTO employees_audit (action, column_name, old_name, new_name, operator)
VALUES ('update', 'firstname', OLD.firstname, NEW.firstname, SYSTEM_USER());
END IF;
IF NEW.lastname <> OLD.lastname THEN
INSERT INTO employees_audit (action, column_name, old_name, new_name, operator)
VALUES ('update', 'lastname', OLD.lastname, NEW.lastname, SYSTEM_USER());
END IF;
-- the same blocks for each another column to be audited
END
使用AFTER触发器。查询失败不会存入日志