Триггер запуска mysql триггера уже используется оператором, который вызывает хранимый триггер
Я хочу настроить триггер, чтобы, если при обновлении поле прогнозирования = 3, триггер изменит значение на 4 и сохранит его в базе данных. Триггер находится ниже.
По какой-то причине я продолжаю получать сообщение об ошибке:
#1442 - Can't update table 'tzanalytic\_forecast\_cached' in stored
function/trigger because it is already used by statement which invoked
this stored function/trigger.
Правильно ли это настроено?
delimiter $$
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW
BEGIN set @prediction = new.prediction;
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END;
$$ delimiter ;
Ответы
Ответ 1
Триггеры MySQL не могут манипулировать таблицей, которой они назначены. Все остальные основные СУБД поддерживают эту функцию, поэтому, надеюсь, MySQL добавит эту поддержку в ближайшее время.
http://forums.mysql.com/read.php?99,122354,240978#msg-240978
Ответ 2
Кроме того, вам необходимо убедиться, что у вас нет других процедур или функций, которые выполняют обновления в таблице, которым назначена эта конкретная процедура, или вы попадаете в рекурсию. Например,
create trigger trig1 After update on table1 FOR EACH ROW
BEGIN
UPDATE table2 SET colum1 = column1 + 1
END;
create trigger trig2 After update on table2 FOR EACH ROW
BEGIN
UPDATE table1 SET colum2 = column2 + 1
END;
Это закончится рекурсией, поэтому остерегайтесь существующих хранимых процедур и функций.