Синтаксис MySQL Workbench "OLD" изменился - PullRequest
0 голосов
/ 06 февраля 2019

У меня был набор триггеров в MySQL, который раньше выполнял то, что я хотел.Недавно мое рабочее место обновило рабочую среду MySQL до версии 6.3.10 на всех компьютерах, и по какой-то причине во время обновления были сброшены триггеры.

По сути, триггер должен обновить столбец с текущей датой, когда другой столбецизменилось.Ранее это было достигнуто с помощью следующего синтаксиса:

if (NEW.colname <> OLD.colname or (OLD.colname is null && NEW.colname is not null)) 
then 
set NEW.othercolname = current_date()

Проблема в том, что когда я пытаюсь воссоздать тот же триггер в новой версии MySQL и применить его, я встречаюсь с ошибкой:

ERROR 1363: There is no OLD row in on INSERT trigger

Мне кажется, что MySQL ищет строку с именем OLD, которая не существует;однако этот синтаксис использовался в предыдущих версиях для получения ожидаемого результата.Кто-нибудь может предложить альтернативный синтаксис для достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019
ERROR 1363: There is no OLD row in on INSERT trigger

MySQL Workbench настроен на создание триггера INSERT.Как говорится в сообщении об ошибке, в триггере INSERT нет строки OLD.

Требуется триггер UPDATE.

0 голосов
/ 06 февраля 2019

Во-первых, сообщение об ошибке исходит от mysql, а не от mysql workbench, поэтому версия mysql workbench здесь неактуальна.

Во-вторых, сообщение об ошибке довольно ясно: вы пытаетесь сослаться на OLD строка в триггере вставки.Это, очевидно, невозможно, поскольку при вставке новой строки нет старой строки.

Вам необходимо изменить либо триггер, чтобы перехватить событие обновления, либо изменить логику триггера.

...