Déclencheur MySQL UPDATE : exécuté uniquement lorsque les données changent
Les déclencheurs MySQL vous permettent d'effectuer automatiquement des actions lorsque des événements spécifiques de base de données (tels que des mises à jour de tables) se produisent. Cependant, vous souhaiterez parfois un déclencheur qui s'exécute uniquement lorsque les données de la ligne mise à jour changent réellement.
Question :
Le déclencheur intégré « APRÈS MISE À JOUR » ne fait pas de distinction entre les mises à jour qui modifient les données et les mises à jour qui ne le font pas. Cela peut conduire à une exécution inutile du déclencheur, en particulier lorsqu'il s'agit de tables comportant de nombreuses colonnes.
Solution :
Bien qu'il ne soit pas possible de comparer les modifications apportées à toutes les colonnes directement dans un déclencheur, il existe une solution de contournement utilisant des horodatages. Chaque fois qu'une ligne est modifiée, MySQL met automatiquement à jour la colonne d'horodatage de la ligne. Par conséquent, vous pouvez utiliser cet horodatage pour déterminer si les données ont changé.
Mise en œuvre :
Voici un exemple :
<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>
Avantages :
Remarque :
Cette solution s'appuie sur le comportement de mise à jour automatique de l'horodatage de MySQL. Si votre application met explicitement à jour l’horodatage, elle risque de ne pas fonctionner comme prévu.
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!