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

trigger acts weird if field is not set on INSERT

这是我的触发器

        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

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

1000+0 = 1000

profiles.credit 也更改为 0

为什么会这样,我该如何预防?

因为是BEFORE insert,省略的NEW.amount很可能是NULL。 some_number + null 为 null,因此 credit 可能是一个不可为 null 的数字字段,当您尝试将其更新为 null 时,它会被分配默认值 0。

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