觸發器陷阱:更新觸發器引用的表
在觸發器中更新相同表可能會導致問題。提供了一個這樣的實例,其中嘗試使用更新後執行的觸發器來更新 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中文網其他相關文章!