триггер mysql при обновлении или вставке - обновить поле в соответствующей строке / строках - PullRequest
1 голос
/ 04 ноября 2019

У меня есть таблица new, в которой есть столбцы stock и delivery_days.

. Мне нужно, когда что-то обновляет / вставляет строки, когда запас или дни поставки изменились, триггер должен обновить поле status, котороеможно получить, вызвав функцию CheckStatus (stock, delivery_days) и вернув 0 или 1

. Я пытался:

BEGIN
            IF NEW.stock != OLD.stock or NEW.delivery_days != OLD.delivery_days
            THEN 
            UPDATE new set status = CheckStatus(stock,delivery_days);
            END IF;
END

, но он не будет работать, потому что будет бесконечное циклирование.

CheckStatus:

BEGIN
    DECLARE `status` INT(11);

    IF stock >= 1 and ddays = 0 THEN SET `status` = 1;
    ELSE SET `status` = 0;
    END IF;

    RETURN `status`;
  END

пример скрипки https://www.db -fiddle.com / f / tvGDajBRxUrHVvWjFnaiYu / 0

1 Ответ

1 голос
/ 04 ноября 2019

Если вы хотите изменить столбец вставляемой / обновляемой строки, не используйте UPDATE, просто используйте SET NEW.status = ... Это изменит значение только в текущей строке, которая породила триггер.

Также вы должны квалифицировать другие столбцы как NEW.stock и NEW.delivery_days.

BEGIN
  IF NEW.stock != OLD.stock or NEW.delivery_days != OLD.delivery_days
  THEN 
    SET NEW.status = CheckStatus(NEW.stock, NEW.delivery_days);
  END IF;
END

Я согласен с комментарием выше, что вы не должны называть свою таблицу new или любую другую Ключевое слово SQL или зарезервированное слово , потому что оно сделает ваш код непонятным для всех, кто его читает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...