小编典典

在同一表上更新后在触发器中更新表

mysql

在同一张表上更新后,如何在触发器中更新表的列?
这是触发条件:

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-无法更新存储函数/触发器中的表'products_score',因为调用该存储函数/触发器的语句已使用该表。

那么我到底该如何工作呢?


阅读 741

收藏
2020-05-17

共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
;
2020-05-17