」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 SQL 中更新同一個表後,如何安全地更新觸發器內的表?

在 SQL 中更新同一個表後,如何安全地更新觸發器內的表?

發佈於2024-12-22
瀏覽:757

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

更新同一個表後更新觸發器中的表

在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