Обновление таблицы в триггере после обновления на той же таблице - PullRequest
15 голосов
/ 28 декабря 2010

Как я могу обновить столбец таблицы в триггере после обновления в той же таблице?Вот триггер:


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.

Так как же я могу заставить это работать?

Ответы [ 2 ]

26 голосов
/ 28 декабря 2010

Если вы измените свой триггер на BEFORE вместо AFTER, вы можете сделать это так:

8 голосов
/ 28 декабря 2010

У вас не может быть этого, как вы настроили, потому что триггер не может запрашивать другие строки той же таблицы, в которой он определен. Вместо этого вы можете использовать Триггер до обновления, чтобы получить то, что вы хотите:

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;

Или используйте хранимую процедуру для обновления таблицы.

...