Maison > base de données > tutoriel mysql > Pourquoi la mise à jour d'une table à l'intérieur d'un déclencheur provoque-t-elle l'erreur n° 1442 et comment cela peut-il être résolu ?

Pourquoi la mise à jour d'une table à l'intérieur d'un déclencheur provoque-t-elle l'erreur n° 1442 et comment cela peut-il être résolu ?

Mary-Kate Olsen
Libérer: 2024-12-23 03:03:33
original
215 Les gens l'ont consulté

Why Does Updating a Table Inside a Trigger Cause Error #1442, and How Can This Be Solved?

Piège du déclencheur : mettre à jour une table référencée par le déclencheur

La mise à jour de la même table dans un déclencheur peut entraîner des problèmes. Un tel exemple est présenté où une tentative est faite de mettre à jour la table products_score à l'aide d'un déclencheur qui s'exécute après une mise à jour.

Le déclencheur, comme indiqué dans le code fourni, tente de calculer et de mettre à jour la colonne votes_total en fonction de les valeurs des autres colonnes (votes_1, votes_2, ..., votes_5) dans la même table products_score. Cependant, lorsque cette mise à jour est déclenchée, une erreur se produit :

#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Copier après la connexion

Solution : Utiliser un déclencheur AVANT

Pour résoudre ce problème, le déclencheur doit être modifié pour exécuter avant la mise à jour de la ligne, pas après. En s'exécutant avant la mise à jour, le déclencheur peut accéder et modifier les nouvelles valeurs attribuées à la colonne votes_total.

Le déclencheur révisé utilisant une clause BEFORE update est le suivant :

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;
Copier après la connexion

Avec Cette modification, le déclencheur calcule et met à jour avec succès la colonne votes_total avant que la mise à jour réelle de la ligne ne se produise, résolvant l'erreur et permettant la fonctionnalité souhaitée.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal