更新后触发器会考虑所有更新的值

时间:2017-08-25 07:32:46

标签: mysql triggers

编辑:这篇文章已经解决了。我有一个愚蠢的错误。我的更新查询没有更改更改字段的值,触发器只捕获第一个值更改。对不起!

我有一个触发器,没有考虑更新查询中的所有更新字段。

这是我的触发器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更改,而不是状态。

我的触发器中可能缺少一些可能在字段上循环的东西? 我认为每一行都没有考虑更新的所有字段。

非常感谢你。

2 个答案:

答案 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)

我的全部错。我的更新查询为第二个字段保持相同的值... 一切正常。