Maison > base de données > tutoriel mysql > Comment puis-je éviter les erreurs « Impossible de mettre à jour la table dans la fonction/le déclencheur stocké » lors de l'utilisation de déclencheurs après la mise à jour ?

Comment puis-je éviter les erreurs « Impossible de mettre à jour la table dans la fonction/le déclencheur stocké » lors de l'utilisation de déclencheurs après la mise à jour ?

Linda Hamilton
Libérer: 2024-12-26 22:28:14
original
702 Les gens l'ont consulté

How Can I Prevent

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

Lorsque vous essayez de mettre à jour la table comme suit :

UPDATE products_score SET votes_1 = 5 WHERE id = 0;
Copier après la connexion

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

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

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!

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