maximw
@maximw

Как отследить вызов пары триггеров при Replace?

При выполнении REPLACE в Mysql фактически делается два действия - удаление строки, если она существует по уникальному ключу, и вставка новой. Соответственно, независимо друг от друга вызываются два триггера After Delete и After Insert.
Существует ли какая-либо возможность отличить внутри процедуры триггера, что он вызван операцией Replace и для него существует "коллега", который уже был или будет вызван? Или хотя бы отличить вызов триггера таким образом от вызовов операциями INSERT и DELETE?
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
mahoho
@mahoho
Full stack certified PHP developer.
Вы не можете внутри тела триггера определить, какой инструкций он был вызван - INSERT или REPLACE. Можно попробовать внутри тела триггера записывать флаги в сессионные переменные:
CREATE TRIGGER  after_delete AFTER delete on table FOR EACH ROW BEGIN
	SET @deleteTriggerExecuted = 1;
END;

CREATE TRIGGER  after_insert AFTER INSERT on class FOR EACH ROW BEGIN
	IF @deleteTriggerExecuted = 1 THEN
		-- триггер after_delete был вызван
	END IF;
END;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы