2014-05-16 30 views
1

我初學者與MySQL和我試圖創建一個充滿日誌表這樣的日誌觸發:取得列名和值MySQL的觸發

DELIMITER $$ 

CREATE TRIGGER ai_user AFTER UPDATE ON user 

FOR EACH ROW 

BEGIN 

    INSERT INTO user_log (action,id,timestamp,column_name,old_value, new_value) 
    VALUES('update',NEW.id,NOW(),COLUMN.NAME,OLD.column_value, NEW.column_value); 
END$$ 

DELIMITER ; 

但我有問題獲得更改的列名稱以及它的舊值和新值。 任何幫助,將不勝感激。謝謝。

+0

你不能這樣做...... mysql觸發器不會從這個語句返回COLUMN.name .. –

回答

2

您對此做痛苦的方式,一次一個:

if not (old.col1 = new.col1 or old.col1 is null and new.col1 is null) 
    INSERT INTO user_log(action, id, timestamp, column_name, old_value, new_value) 
     VALUES('update', NEW.id, NOW(), 'col1', OLD.col1, NEW.col1); 
end if; 
if not (old.col2 = new.col2 or old.col2 is null and new.col2 is null) 
    INSERT INTO user_log(action, id, timestamp, column_name, old_value, new_value) 
     VALUES('update', NEW.id, NOW(), 'col2', OLD.col2, NEW.col2); 
end if; 
. . . 

注意,這些沒有else條款。你想檢查每個值。順便說一下,當你用這種方式進行更新時,如果你比較的列有不同的類型,你需要小心類型。

+0

感謝的人,它適用於我。 –