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

nha*_*123 15 mysql sql mysql-error-1442

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


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.

那么我怎么能让这个工作呢?

Kla*_*sen 26

如果您更改触发器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
;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ndu 8

您不能按照设置的方式使用此方法,因为触发器无法查询定义的同一个表的其他行.您可以使用"更新前触发器"来实现您的需求:

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;
Run Code Online (Sandbox Code Playgroud)

或使用存储过程更新表.

  • 更新后调用触发器内的存储过程时出现相同的错误消息 (2认同)