MySQL Trigger,每行的变量/时间戳相同

时间:2014-05-28 19:40:03

标签: mysql

我正在尝试使用触发器来创建自动审计跟踪。

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很新,所以我很感激您的回复中的细节。

提前致谢!

1 个答案:

答案 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);