Déclencheur MySQL : détecter les modifications réelles des données
Les déclencheurs MySQL sont utilisés pour effectuer des opérations spécifiques lorsque les données sont modifiées. Cependant, déterminer si les données ont réellement changé devient un défi lorsque seules des modifications significatives des données déclenchent des actions. Les mots-clés NEW
et OLD
permettent des comparaisons au niveau des colonnes, mais dans les tableaux comportant de nombreuses colonnes, s'appuyer sur une seule comparaison peut devenir fastidieux et sujet aux erreurs.
Déclenchement basé sur l'horodatage
Une façon de résoudre ce problème consiste à utiliser des horodatages pour déterminer si une modification des données a eu lieu. MySQL met automatiquement à jour la colonne d'horodatage avec l'heure actuelle lorsqu'une ligne est insérée ou modifiée. En comparant les nouveaux et anciens horodatages, nous pouvons déterminer si des modifications ont été apportées.
Méthode de mise en œuvre
Pour implémenter un déclencheur qui s'exécute uniquement lorsque les données réelles changent, envisagez les étapes suivantes :
NEW
et OLD
. L'action de déclenchement n'est exécutée que si les horodatages sont différents. <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>
Exemple
Dans cet exemple, la table foo
contient une colonne ts
supplémentaire pour suivre les horodatages. Le déclencheur ins_sum
est configuré pour insérer un enregistrement dans la table bar
uniquement lorsque l'horodatage de la ligne mise à jour change.
<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>
Avantages de l'utilisation des horodatages
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!