我有一个触发器,没有考虑更新查询中的所有更新字段。
这是我的触发器history_transaction
,我只审核表status
的{{1}}和price_asked
字段的更改
transac_transaction
如果我执行更新,例如:
CREATE TRIGGER history_transaction
AFTER UPDATE ON transac_transaction
FOR EACH ROW
BEGIN
IF(OLD.status <> NEW.status) THEN
INSERT INTO transac_transaction_history(transac_id, author, old_data, new_data, date_upd)
VALUES (OLD.id, OLD.last_author_id_update, OLD.status, NEW.status, NOW());
END IF;
IF(OLD.price_asked <> NEW.price_asked) THEN
INSERT INTO transac_transaction_history(transac_id, author, old_data, new_data, date_upd)
VALUES (OLD.id, OLD.last_author_id_update, OLD.price_asked, NEW.price_asked, NOW());
END IF;
END;
$$
我只会在审计表中插入price_asked更改,而不是状态。
我的触发器中可能缺少一些可能在字段上循环的东西? 我认为每一行都没有考虑更新的所有字段。
非常感谢你。
答案 0 :(得分:0)
我认为你应该考虑NULL值: 你能尝试修改
吗?IF(OLD.status <> NEW.status)
与
IF(OLD.status <> NEW.status
OR ((OLD.status IS NULL OR NEW.status IS NULL) AND OLD.status IS NOT NULL A NEW.status IS NOT NULL) )
和price_asked相同
答案 1 :(得分:0)
我的全部错。我的更新查询为第二个字段保持相同的值... 一切正常。