获取MySQL触发器的列名和值

时间:2014-05-16 03:34:28

标签: mysql database triggers

我是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 ;

但我有问题需要更改列名及其新旧值。 任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分: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条款。您想检查每个值。

顺便说一下,当你以这种方式进行更新时,如果你要比较的列有不同的类型,你需要注意类型。