MySQL插入和更新触发器问题

时间:2013-04-09 18:03:08

标签: mysql triggers

我试图通过分别捕获插入和更新的用户ID和时间戳来实现行级审计。但由于某种原因,即使对于更新,插入触发器也会触发,并且每次都会更新两个insert_ *列(对于更新也是如此)。 请帮忙。

create table test
(id varchar(30) primary key,
insert_id varchar(30),
insert_timestamp timestamp, 
update_id varchar(30), 
update_timestamp timestamp);

BEFORE INSERT触发器

 DELIMITER //
    create trigger ins_test 
    before insert on test 
    for each row 
    Begin
    set new.insert_id = session_user();
    set new.insert_timestamp = now();
    End;
    //

BEFORE UPDATE触发器

  DELIMITER //
    create trigger upd_test 
    before update on test 
    for each row 
    Begin
    set new.update_id = session_user();
    set new.update_timestamp = now();
    End;
    //

-Ganesh

1 个答案:

答案 0 :(得分:0)

我在SQL Fiddle的MySQL 5.5.30中尝试了你的代码,触发器正常工作。

如果您不希望它们在插入时默认为current_timestamp,则应将timestamp列显式定义为NULL:

create table test
(
  id varchar(30) primary key,
  insert_id varchar(30) null,
  insert_timestamp timestamp null, 
  update_id varchar(30) null, 
  update_timestamp timestamp null
);

试试这个SQL Fiddle,看看您的触发器是否正常工作。我在每个语句之间添加了1秒的睡眠,因此您可以告诉insert_timestamp在更新时不会更改。