簡體   English   中英

在同一表上更新后更新觸發器中的表

[英]Updating table in trigger after update on the same table

在同一個表上更新后如何更新觸發器中的表列?
這是觸發器:


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.

那么我到底如何才能讓它發揮作用呢?

如果您將觸發器更改為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
;

您不能按照您設置的方式進行設置,因為觸發器無法查詢定義它的同一表的其他行。 相反,您可以使用更新前觸發器來實現您想要的:

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;

或者使用存儲過程來更新表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM