代码之家  ›  专栏  ›  技术社区  ›  max

如果未在INSERT上设置字段,则触发器行为怪异

  •  0
  • max  · 技术社区  · 6 年前

    这是我的扳机

            CREATE TRIGGER  before_insert_user_credit
              BEFORE INSERT
              ON user_credit
              FOR EACH ROW
            BEGIN
                 UPDATE profiles SET credit  = credit + NEW.amount  WHERE user_id = NEW.user_id ;
            END     
    

    它很简单,工作很好 我在上插入了 user_credit 我错了,忘了设置 amount 。。。该字段是整数,因此该值存储为默认值,即0

    所以我有1000个 profiles.credit 所以我认为这不会改变它

    1000+0=1000

    但是 配置文件。信用 也已更改为0

    为什么会这样?我该如何防止这种情况?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Uueerdo    6 年前

    由于是在insert之前,因此省略了NEW。金额可能为空。 some_number + null 为null,因此credit可能是一个不可为null的数字字段,当您尝试将其更新为null时,会将其默认值指定为0。

    尝试 ... SET credit = credit + IFNULL(NEW.amount, 0) ... 相反