В книге «Библия администратора MySQL» авторы описывают некоторые ограничения в отношении сочетания событий, времени и ключевых слов NEW и OLD в триггерах. Что они скажут:Ограничения относительно NEW и OLD в MySQL триггерах
-BREEN INSERT: NEW поддерживается ПЕРЕД ВСТАВКОЙ. BEFORE не поддерживает OLD.
-AFTER INSERT: ПОСЛЕ не поддерживает NEW. Не имеет смысла использовать OLD с AFTER INSERT.
-BREEN UPDATE: NEW поддерживается ПЕРЕД ОБНОВЛЕНИЕМ. BEFORE не поддерживает OLD.
-AFTER ОБНОВЛЕНИЕ: ПОСЛЕ не поддерживает NEW. ПОСЛЕ ОБНОВЛЕНИЯ поддерживает OLD.
-УДАЧАТЬ: Не имеет смысла использовать NEW с ПРЕЖДЕ ЧЕМ УДАЛИТЬ. BEFORE не поддерживает OLD.
-AFTER DELETE: ПОСЛЕ не поддерживает NEW. OLD поддерживается AFTER DELETE.
То есть, согласно книге, например, я не могу использовать NEW, когда использую ПОСЛЕ. Однако в следующем триггере это именно то, что я делаю. Если какой-либо новый сотрудник вставлен, я сохраняю этого сотрудника в резервной таблице, называемой employee_history.
CREATE TRIGGER insert_emplyee_history
AFTER INSERT ON EMPLOYEE
FOR EACH ROW
INSERT INTO EMPLOYEE_HISTORY VALUES (NEW.NOME,NEW.SSN,NEW.SALARIO,NEW.DNO);
Этот триггер работает как ожидается в MySQL 5.7.
Является ли книга неправильной? Возможно, эти ограничения были изменены в последних версиях (5.7).
Я хотел бы знать, какие ограничения связаны с комбинациями событий, времени и OLD и NEW.
Учитывая, какие инструменты используются для многих, это не имеет смысла. Я думаю, что после раздела вставки есть опечатка, хотя они говорят о том, как она не поддерживает и старое. Это имеет смысл только для того, чтобы иметь новые значения, потому что те, которые вы вкладываете, и не будет старых значений, потому что запись является новой.Триггеры обновлений должны иметь как старые, так и новые, потому что иногда вам нужно записывать оба набора значений для целей аудита. Удалить может иметь только старые значения, потому что это существующая запись, которая отбрасывается, поэтому нет новой информации, кроме нулей/ – HLGEM
Благодарим вас за комментарии. – Zaratruta