ПРЕЖДЕ ЧЕМ ОБНОВИТЬ ТРИГГЕР И ИЗМЕНЕННЫЕ ПОЛЯ новые и старые

0

ПЕРЕД ОБНОВЛЕНИЕМ ТРИГГЕРА И ИЗМЕНЕННЫМИ ПОЛЯМИ Новые и старые

Если запись обновляется, у меня есть триггер, который манипулирует некоторыми столбцами в данных. Одно поле - "QTY", которое может меняться или не меняться при изменении других столбцов/полей, которые вызывают запуск триггера

Если QTY изменен, я хочу выполнить логику, если она не изменится. Я не хочу, чтобы действие не выполнялось, и значение "QTY" оставалось неизменным.

Похоже, что если QTY не изменяется, то "OLD.QTY" и "NEW.QTY" имеют разные значения

Какое условие я могу использовать, чтобы увидеть, изменилось ли "QTY"

Если "QTY" не изменяется, значение NEW.QTY = "null" не будет

  • 1
    «Какое условие я могу использовать, чтобы увидеть, изменилось ли« QTY »», не совсем ясно, что вы имеете в виду, не видя код триггера SQL. Я думаю, что оператор CASE END лучше всего подходит. CASE WHEN OLD.QTY <> NEW.QTY THEN ... ELSE ... END
Теги:
mysql-workbench

1 ответ

0

Когда столбец c1 не изменяется, триггер BEFORE UPDATE будет иметь значения OLD.c1 и NEW.c1 значениям, поскольку это значение было как до, так и после обновления.

Выражение (OLD.c1 <=> NEW.c1) оценивается как TRUE когда значение столбца не изменяется, иначе FALSE.

Выражение (NOT (OLD.c1 <=> NEW.c1)) оценивается как TRUE если значение столбца изменено, иначе FALSE.

Не используйте = или != Или <> для сравнения в триггерах обновлений, если вы не полностью понимаете последствия 3VL, поскольку они не являются нулевыми операторами.

  • 0
    В new.qty я выполнял вычисления, предполагая, что new.qty был таким же, как old.qty, так как не было новой записи для qty.
  • 0
    Затем я получил результаты мусора для new.qty, затем я протестировал new.qty = null и, если это так, установил new.qty = old.qty, и это, похоже, решило проблему
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню