Interruption de déclenchement lors de la mise à jour d'une table : résolution du problème
Dans la programmation de bases de données, il est parfois nécessaire de mettre à jour la colonne d'une table à l'aide d'un déclencheur après une opération de mise à jour sur la même table. Cependant, cela peut entraîner une erreur si le déclencheur tente de mettre à jour la table alors qu'elle est déjà en cours de mise à jour.
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)
Lorsqu'une opération de mise à jour est effectuée à l'aide de ce déclencheur, l'erreur "#1442 - Impossible de mettre à jour la table 'products_score' dans la fonction/déclencheur stocké car elle est déjà utilisée par l'instruction qui a invoqué cette fonction/déclencheur stocké" est rencontré.
Pour résoudre ce problème, modifiez le timing du déclenchement sur AVANT au lieu d'APRÈS. Cela permet au déclencheur de s'exécuter avant l'opération de mise à jour, évitant ainsi que la table ne soit verrouillée pendant la mise à jour. Le déclencheur mis à jour devrait ressembler à ceci :
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 ce déclencheur modifié, la colonne de la table peut être mise à jour avec succès après l'opération de mise à jour.
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!