триггер действует странно, если поле не установлено на INSERT - PullRequest
0 голосов
/ 02 мая 2018

вот мой триггер

        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 Ответ

0 голосов
/ 02 мая 2018

Поскольку это ПЕРЕД вставкой, пропущенное значение NEW.amount, вероятно, равно NULL. some_number + null имеет значение NULL, поэтому кредит, вероятно, представляет собой необнуляемое числовое поле, которому присваивается значение по умолчанию, равное 0, когда вы пытаетесь обновить его до NULL.

Попробуйте ... SET credit = credit + IFNULL(NEW.amount, 0) ....

...