我正在保存对用户个人资料的修改(用于记录目的)。
我正在使用此查询在:
中插入/更新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
仍然可以更新具有重复旧值和新值的行;即使只是在使用该触发器更新之前删除行