我正在尝试使用触发器来创建自动审计跟踪。
CREATE TRIGGER `audit_trigger_name_here` AFTER UPDATE ON `source_table`
FOR EACH ROW
INSERT INTO `audit_table` (`OldCol`, `NewCol`, `TimeStamp`)
VALUES (OLD.Col, NEW.Col, UTC_TIMESTAMP())
到目前为止一切顺利。但由于单个查询可以更改多行,因此我们希望能够使用唯一标识符对它们进行分组。
我尝试使用UTC_TIMESTAMP()执行此操作,但希望这会导致每次“FOR EACH ROW”迭代的新时间戳。我需要的是一种方法,在FOR EACH ROW部分之前的开头设置一次变量的时间戳,然后能够使用该变量。
我对mysql很新,所以我很感激您的回复中的细节。
提前致谢!
答案 0 :(得分:0)
确保source_table中有一个列,每次更新时都会使用当前的utc_timestamp进行更新(不在触发器中),然后在触发器中使用该列。
您将在OLD / NEW中找到所有值。命名空间,如果所有行只获得相同的utc_timestamp,那么所有行都将插入审计表中。
沿着
的路线create table source (
id int,
value varchar(255),
ts timestamp
);
create trigger audit after update on source
for each row
insert into audit (old, new, ts) values (old.value, new.value, new.ts);
update source
set value = 'some new value',
ts = utc_timestamp()
where id in (1,2,3);