2013-04-09 5 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); 

내가 SQL 바이올린에서의 MySQL 5.5.30에서 코드를 시도

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

UPDATE 트리거 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; 
    // 

전 트리거가 제대로 작동합니다. 당신이 그 (것)들을 삽입에 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을보십시오. insert_timestamp가 업데이트시 변경되지 않는다는 것을 알 수 있도록 각 문 사이에 1 초의 절전을 추가했습니다.

+0

감사합니다. 타임 스탬프 열을 NULL이 정의 된대로 정의합니다. – user2263025