2013-04-09 37 views
0

我正试图通过捕获单独插入和更新的用户ID和时间戳来实现行级审计。但由于某些原因,插入触发器即使更新也会触发,并且每次都更新两个insert_ *列(有关更新)。 请帮忙。MySQL插入和更新触发器问题

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

回答

0

我想你的代码在MySQL在30年5月5日SQL小提琴和触发器正常工作。

你应该明确地定义timestamp列为NULL,如果你不想让他们默认为CURRENT_TIMESTAMP上插入:

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在更新时不会更改。

+0

感谢您的支持!定义时间戳列为NULL工作。 – user2263025 2013-04-12 18:47:34