代码之家  ›  专栏  ›  技术社区  ›  user2263025

MySQL插入和更新触发问题

  •  0
  • user2263025  · 技术社区  · 12 年前

    我试图通过分别捕获插入和更新的用户id和时间戳来实现行级审计。但由于某种原因,即使是更新,insert触发器也会触发,并且两个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 回复  |  直到 12 年前
        1
  •  0
  •   Ike Walker    12 年前

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

    如果不希望时间戳列在插入时默认为current_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在更新时不会更改。