首頁 >資料庫 >mysql教程 >為什麼更新觸發器內的表會導致錯誤 #1442,如何解決此問題?

為什麼更新觸發器內的表會導致錯誤 #1442,如何解決此問題?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-23 03:03:33219瀏覽

Why Does Updating a Table Inside a Trigger Cause Error #1442, and How Can This Be Solved?

觸發器陷阱:更新觸發器引用的表

在觸發器中更新相同表可能會導致問題。提供了一個這樣的實例,其中嘗試使用更新後執行的觸發器來更新 products_score 表。

觸發器(如提供的程式碼所示)嘗試根據下列條件計算並更新 votes_total 欄位:同一 products_score 表中其他欄位(votes_1、votes_2、...、votes_5)的值。然而,當觸發此更新時,會出現錯誤:

#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 觸發器

要解決此問題,必須將觸發器修改為在行更新之前執行,而不是之後執行。透過在更新之前執行,觸發器可以存取和修改分配給 votes_total 列的新值。

使用BEFORE update 子句修改後的觸發器如下:

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;
With透過此修改,觸發器在實際行更新發生之前成功計算並更新votes_total 列,從而解決了錯誤並允許實現所需的功能。

以上是為什麼更新觸發器內的表會導致錯誤 #1442,如何解決此問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn