2013-04-09 33 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