MySQL UPDATE觸發器:僅在資料變更時執行
MySQL觸發器可讓您在特定資料庫事件(例如表更新)發生時自動執行操作。但是,有時您可能需要一個僅在更新的行中的資料實際變更時才執行的觸發器。
問題:
內建的「AFTER UPDATE」觸發器不會區分更改資料和不更改資料的更新。這可能導致不必要的觸發器執行,尤其是在處理具有許多列的表時。
解:
雖然無法直接在觸發器中比較所有列的更改,但有一種使用時間戳記的變通方法。每當修改行時,MySQL都會自動更新行的timestamp列。因此,您可以使用此時間戳記來確定資料是否已變更。
實作:
以下是一個範例:
<code class="language-sql">CREATE TRIGGER ins_sum AFTER UPDATE ON foo FOR EACH ROW BEGIN IF NEW.ts != OLD.ts THEN INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b); END IF; END;</code>
優點:
注意:
此解決方案依賴MySQL的自動時間戳更新行為。如果您的應用程式明確更新時間戳,則它可能無法按預期工作。
以上是如何使 MySQL 觸發器僅在 UPDATE 後資料實際變更時才執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!