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
890 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!

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