MySQL插入和更新触发器问题

MySQL插入和更新触发器问题,mysql,triggers,Mysql,Triggers,我试图通过分别捕获插入和更新的用户id和时间戳来实现行级审核。但是由于某些原因,即使是对于更新,insert触发器也会触发,并且两个insert_*列每次都会更新(对于更新也是如此)。 请帮忙 桌子 插入触发器前 DELIMITER // create trigger ins_test before insert on test for each row Begin set new.insert_id = session_user(); s

我试图通过分别捕获插入和更新的用户id和时间戳来实现行级审核。但是由于某些原因,即使是对于更新,insert触发器也会触发,并且两个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;
    //
更新前触发器

  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

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

如果不希望时间戳列在插入时默认为当前的\u时间戳,则应将时间戳列显式定义为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
);

尝试此操作以查看触发器是否正常工作。我在每条语句之间添加了1秒的睡眠时间,这样您就可以知道insert_时间戳在更新时不会更改。

谢谢!将时间戳列定义为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
);