MySQL-Trigger: Erkennen tatsächlicher Datenänderungen
MySQL-Trigger werden verwendet, um bestimmte Vorgänge auszuführen, wenn Daten geändert werden. Die Feststellung, ob sich die Daten tatsächlich geändert haben, wird jedoch zu einer Herausforderung, wenn nur signifikante Datenänderungen Maßnahmen auslösen. Die Schlüsselwörter NEW
und OLD
ermöglichen Vergleiche auf Spaltenebene, aber in Tabellen mit vielen Spalten kann es mühsam und fehleranfällig werden, sich auf einen einzelnen Vergleich zu verlassen.
Zeitstempelbasierte Auslösung
Eine Möglichkeit, dieses Problem zu lösen, besteht darin, Zeitstempel zu verwenden, um festzustellen, ob Datenänderungen stattgefunden haben. MySQL aktualisiert die Zeitstempelspalte automatisch mit der aktuellen Zeit, wenn eine Zeile eingefügt oder geändert wird. Durch den Vergleich der neuen und alten Zeitstempel können wir feststellen, ob Änderungen vorgenommen wurden.
Implementierungsmethode
Um einen Trigger zu implementieren, der nur ausgeführt wird, wenn sich tatsächliche Daten ändern, beachten Sie die folgenden Schritte:
NEW
und OLD
zu vergleichen. Die Trigger-Aktion wird nur ausgeführt, wenn die Zeitstempel unterschiedlich sind. <code class="language-sql">CREATE TABLE foo ( a INT, b INT, ts TIMESTAMP ); 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>
Beispiel
In diesem Beispiel enthält die foo
-Tabelle eine zusätzliche ts
-Spalte zum Verfolgen von Zeitstempeln. Der ins_sum
-Trigger ist so konfiguriert, dass er einen Datensatz nur dann in die Tabelle bar
einfügt, wenn sich der Zeitstempel der aktualisierten Zeile ändert.
<code class="language-sql">-- 向'foo'表插入初始数据 INSERT INTO foo (a, b) VALUES (1, 1), (2, 2), (3, 3); -- 更新'foo'表,但未进行任何更改 UPDATE foo SET b = 3 WHERE a = 3; -- 验证触发器未执行 SELECT * FROM bar; -- 输出:空集(未检索到任何行) -- 使用实际更改更新'foo'表 UPDATE foo SET b = 4 WHERE a = 3; -- 验证触发器已执行 SELECT * FROM bar; -- 输出:包含数据的行(触发器操作已完成)</code>
Vorteile der Verwendung von Zeitstempeln
Das obige ist der detaillierte Inhalt vonWie können MySQL-Trigger tatsächliche Datenänderungen effizient erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!