如果未在 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) ...
。
这是我的触发器
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) ...
。