情况

我正在保存对用户配置文件所做的修改(用于记录目的) .

我正在使用此查询插入/更新:

INSERT INTO infos_update (username, date_modif, column_name, old_value, new_value)
  VALUES ('johnsmith', CURDATE(), 'department', 'Management', 'IT/IS')
  ON DUPLICATE KEY UPDATE new_value='IT/IS, date_modif=CURDATE()

主键由 date_modif, username, column_name 组成,其中日期是日期而不是日期时间 .

目标

我想使用触发器来避免记录未更改的值(old_value和new_value等于的值)

delimiter //
CREATE TRIGGER before_insert_infos_update 
BEFORE INSERT ON infos_update FOR EACH ROW 
BEGIN
IF NEW.old_value = NEW.new_value THEN
  DELETE FROM infos_update 
    WHERE infos_update.username= NEW.username
    AND infos_update.date_modif = NEW.date_modif
    AND infos_update.column_name = NEW.column_name;
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Values are the same';
END IF;
END\\`

它可以防止初始插入时出现重复,但是当已插入行时, on duplicate key update 仍然可以更新具有重复旧值和新值的行;即使只是在使用该触发器更新之前删除行