更新同一個表後更新觸發器中的表
在SQL 中,更新觸發器後更新表同一張表提出了一個潛在的問題。這是因為該表已針對更新操作鎖定,並且嘗試在作為相同交易的一部分執行的觸發器內存取該表可能會導致衝突。
要規避此限制,您可以更新透過使用 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 ;
在此範例中,觸發器將在 products_score 表上的每次更新操作之前執行。它將根據更新的列(votes_1 到 votes_5)的值計算 votes_total 列的新值,並將其儲存在觸發器上下文提供的 new.votes_total 虛擬列中。
當您更新表時,觸發器將確保 votes_total 列相應更新,即使更新語句沒有明確更新 votes_total 列本身。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3