authoris
@authoris
Основал небольшую Курскую студию

Почему триггер на AFTER UPDATE срабатывает, когда UPDATE не запрашивался?

И так такая проблемка. Требуется писать в некоторую таблицу данные, после того, как над другой таблицей произошли изменения (добавили запись, удалили, или обновили)

Вешаю три простых триггера (AFTER INSERT, AFTER UPDATE, AFTER DELETE), вроде этого:

CREATE TRIGGER `change_products_version_by_products_update` AFTER UPDATE ON `Product`
	FOR EACH ROW BEGIN
		IF NEW.productType = 1 OR NEW.productType = 2 OR NEW.productType = 3 OR NEW.productType = 5 OR OLD.productType = 1 OR OLD.productType = 2 OR OLD.productType = 3 OR OLD.productType = 5 THEN
			INSERT INTO `ControlSet` SET `name` = 'Product', `pid` = 1, `method` = 'put', `referrer` = OLD.id;
	    END IF;
	END;


Все очень просто как кирпич.

Проблема в том, что триггер на UPDATE, по какой-то причине срабатывает не во время запроса UPDATE.

Подозреваю, что дело в том, что на отношение `Product` повешен внешний ключ в другую таблицу, в которую ведется запись. И срабатывает как раз при записи в другую таблицу, с указанием id той записи, на которую срабатывает триггер. Возможно MySQL меняет какие-то внутренние данные.

Может кто-то знает, как отловить внутри триггера, что изменения происходят во взаимосвязанной таблице, а не в той, на которую триггер повешен?
  • Вопрос задан
  • 887 просмотров
Решения вопроса 1
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Триггер дергается без реального изменения данных? Тогда можно проверить различие значений в :OLD.COL и :NEW.COL
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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