在插入之前删除触发器上的行,具有重复更新

时间:2018-02-20 10:12:05

标签: mysql triggers

场合

我正在保存对用户个人资料的修改(用于记录目的)。

我正在使用此查询在:

中插入/更新
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仍然可以更新具有重复旧值和新值的行;即使只是在使用该触发器更新之前删除行

0 个答案:

没有答案