Подтвердить что ты не робот

Триггер запуска 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 ;
4b9b3361

Ответ 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;

Это закончится рекурсией, поэтому остерегайтесь существующих хранимых процедур и функций.