trigger的行为很奇怪

voase2hg  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(319)

这是我的扳机

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
但是 profiles.credit 也更改为0
为什么会这样?我怎样才能防止呢?

7y4bm7vi

7y4bm7vi1#

因为它在insert之前,所以省略的new.amount可能为空。 some_number + null 为null,因此credit可能是一个不可为null的数字字段,当您尝试将其更新为null时,它会被指定为默认值0。
尝试 ... SET credit = credit + IFNULL(NEW.amount, 0) ... 相反。

相关问题