我是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 :(得分: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
条款。您想检查每个值。
顺便说一下,当你以这种方式进行更新时,如果你要比较的列有不同的类型,你需要注意类型。