Нельзя использовать оператор update
, insert
или delete
в триггере на одной и той же таблице.
Вместо этого вам нужно манипулировать виртуальной таблицей NEW
.
DELIMITER $$
CREATE TRIGGER CalculateAvgACD AFTER INSERT ON agent FOR EACH ROW
BEGIN
IF (NEW.TotalACDTime != -1) AND (NEW.TotalACDTime <> 0) THEN
SET NEW.AvgACDTime = NEW.AnsweredCalls/NEW.TotalACDTime;
END IF;
END $$
DELIMITER ;
Этот код делает то же самое, что и ваш код, но потому что он работает только со значениями NEW в текущей строкеон будет работать без жалоб MySQL на то, что триггер самореферентный.Обратите внимание, что я также исправил потенциальную ошибку divide by zero
.