Maison > base de données > tutoriel mysql > Comment résoudre les erreurs « Impossible de mettre à jour la table… car elle est déjà utilisée » dans les déclencheurs MySQL ?

Comment résoudre les erreurs « Impossible de mettre à jour la table… car elle est déjà utilisée » dans les déclencheurs MySQL ?

Patricia Arquette
Libérer: 2024-12-27 18:51:13
original
810 Les gens l'ont consulté

How to Resolve

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

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

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!

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