Déclencher des mises à jour après la mise à jour de la même table
Dans les systèmes de bases de données, les déclencheurs sont utilisés pour effectuer automatiquement des actions spécifiques lorsque certains événements se produisent dans une table. Un défi courant survient lorsque l'on tente de mettre à jour la même table à partir d'un déclencheur après une mise à jour sur cette table.
Considérez le déclencheur suivant :
CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score FOR EACH ROW UPDATE products_score SET products_score.votes_total = (SELECT (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) FROM products_score WHERE id = new.id);
Lorsque vous essayez de mettre à jour la table comme suit :
UPDATE products_score SET votes_1 = 5 WHERE id = 0;
le déclencheur échoue avec l'erreur :
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Pour résoudre ce problème, le déclencheur doit être modifié pour exécuter avant l'événement de mise à jour, plutôt qu'après. Cela permet au déclencheur de mettre à jour la table avant que l'instruction de mise à jour d'origine ne soit appliquée :
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5; END;
Avec cette modification, la mise à jour de la table comme avant déclenchera avec succès la mise à jour de la colonne votes_total.
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!