如果INSERT

时间:2018-05-01 21:25:32

标签: mysql triggers innodb

这是我的触发器

        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

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

1 个答案:

答案 0 :(得分:1)

由于它是插入之前,省略的NEW.amount可能是NULL。 some_number + null为null,因此,当您尝试将其更新为null时,credit可能是一个不可为空的数字字段,其默认值为0。

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