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

19
如何在同一张表上的更新后,通过触发器更新表格的列? 这是触发器的代码:

创建一个触发器upd_total_votes,当对products_score表进行UPDATE操作时,该触发器将在每个受影响行上执行以下操作:
更新products_score表中new.id对应的记录的votes_total字段值为:votes_1、votes_2、votes_3、votes_4和votes_5字段之和。

现在,当我像这样更新表格时:

更新产品评分表中ID为0的记录的1星评价为5。

这个不起作用,因为我收到了以下信息:

#1442 - 无法在存储函数/触发器中更新'tablescore'表,因为它已经被调用此存储函数/触发器的语句使用。

那么我怎么才能让它正常工作呢?

2个回答

31

如果你把触发器的设置从 AFTER 改为 BEFORE,你可以这样做:

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
;

8

由于触发器不能查询其定义表中的其他行,因此您无法按照您设置的方式进行操作。相反,您可以使用“Before Update 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;

或者使用存储过程更新表格。


2
在触发器内调用存储过程后更新时出现相同的错误消息。 - vladiastudillo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接