同一表更新後觸發更新
在資料庫系統中,觸發器用於在表中發生某些事件時自動執行特定操作。在更新表後嘗試從觸發器內更新同一個表時,會出現一個常見的挑戰。
考慮以下觸發器:
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.要解決此問題,觸發器必須修改為在更新事件之前執行,而不是之後。這允許觸發器在應用原始更新語句之前更新表:
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;透過此修改,像以前一樣更新表將成功觸發 votes_total 列更新。
以上是使用更新後觸發器時如何防止「無法更新儲存函數/觸發器中的表」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!