如何在同一个表上更新后更新触发器中的表列?
这是触发器:
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.
那么我怎么能让它发挥作用呢?
答案 0 :(得分: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
;
答案 1 :(得分: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;
或使用存储过程更新表。