在同一表上更新後更新觸發器中的表
在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 列本身。
以上是在 SQL 中更新同一個表後,如何安全地更新觸發器內的表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!