@new_mysql

Как в триггере сделать проверку, что изменение вызвал другой триггер?

Как в триггере сделать проверку, что изменение вызвал другой триггер, а не пользователь?

Внутри триггера откатываю изменения для некоторых столбцов при определенных условиях, мне необходимо игнорировать эти откатывания(изменения), если изменение вызвал другой триггер, а не пользователь.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
В общем случае невозможно определить, чем вызвано изменение данных, приведшее к срабатыванию триггера. Так что определить встроенными средствами - нельзя.

Для решения задачи необходимо использовать внешние средства передачи данных. Поскольку весь каскад триггеров работает в одном соединении, проще всего использовать определённые пользователем переменные с предопределёнными именами, которые инициализируются на старте триггера и сбрасываются на его финише:

CREATE TRIGGER trigger_name
EVENT ACTION ON table_name
FOR EACH ROW
BEGIN
    SET @trigger_name_table_name = CONCAT('executed, ', 'column_value=', NEW.column);
-- trigger action
    SET @trigger_name_table_name = NULL;
END;

Если в теле триггера определены EXIT хэндлеры - они тоже должны выполнять соответствующие сбросы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы