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中文网其他相关文章!