Обновление таблицы в триггере после обновления в той же таблице
Как обновить столбец таблицы в триггере после обновления в той же таблице?
Здесь триггер:
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score
FOR EACH ROW
UPDATE
products_score
SET
products_score.votes_total =
(SELECT
(votes_1 + votes_2 + votes_3 + votes_4 + votes_5)
FROM
products_score
WHERE
id = new.id)
Теперь, когда я обновляю таблицу, например
UPDATE products_score SET votes_1 = 5 WHERE id = 0
это не работает, поскольку я получаю следующее:
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Итак, как я могу заставить это работать?
Ответы
Ответ 1
Если вы измените свой триггер на BEFORE
вместо AFTER
, вы можете сделать это следующим образом:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score
FOR EACH ROW
BEGIN
SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5
END
;
Ответ 2
У вас не может быть такого, как вы настроили, потому что триггер не может запрашивать другие строки той же таблицы, на которых он определен.
Istead вы можете использовать Trigger перед обновлением, чтобы получить то, что вы хотите:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW
BEGIN
SET NEW.votes_total = NEW.votes_1 + NEW.votes_2 + NEW.votes_3 + NEW.votes_4 + NEW.votes_5;
END;
Или используйте хранимую процедуру для обновления таблицы.