这是我的扳机
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
为什么会这样?我怎样才能防止呢?
1条答案
按热度按时间7y4bm7vi1#
因为它在insert之前,所以省略的new.amount可能为空。
some_number + null
为null,因此credit可能是一个不可为null的数字字段,当您尝试将其更新为null时,它会被指定为默认值0。尝试
... SET credit = credit + IFNULL(NEW.amount, 0) ...
相反。