Maison > base de données > tutoriel mysql > Comment puis-je mettre à jour une table MySQL après un déclencheur INSERT sans erreur ?

Comment puis-je mettre à jour une table MySQL après un déclencheur INSERT sans erreur ?

Susan Sarandon
Libérer: 2024-12-27 00:54:17
original
679 Les gens l'ont consulté

How Can I Update a MySQL Table After an INSERT Trigger Without Errors?

Déclencheurs et mises à jour de table dans MySQL

Lors de la tentative de mise à jour de la même table après une opération INSERT à l'aide d'un déclencheur, les utilisateurs peuvent rencontrer l'erreur "Impossible de mettre à jour la table ACCOUNTS... déjà utilisée par l'instruction qui a invoqué ce déclencheur." Cette limitation provient de l'interdiction de modifier une table actuellement utilisée par l'instruction de déclenchement.

Pour contourner ce problème, il n'est pas possible de s'appuyer uniquement sur les déclencheurs. Au lieu de cela, une procédure stockée doit être créée pour gérer à la fois les actions INSERT et update au sein d’une seule transaction. En validant manuellement les modifications à l'aide de la procédure stockée, les utilisateurs peuvent contourner la contrainte imposée par les déclencheurs.

Étapes de mise en œuvre d'une solution de contournement de procédure stockée :

  1. Créer un stocké Procédure :
CREATE PROCEDURE update_accounts_status(IN new_account_pk BIGINT) AS
BEGIN
    -- Insert new account
    INSERT INTO ACCOUNTS (user_id, edit_on, status)
    VALUES (?, ?, 'A');
    
    -- Update old account
    UPDATE ACCOUNTS SET status = 'E' WHERE pk = ?;
    
    -- Commit changes
    COMMIT;
END
Copier après la connexion
  1. Appeler la procédure stockée :

Au lieu d'utiliser un déclencheur, la procédure stockée peut être appelé INSERT dans la table COMPTES. Cela garantit que les actions d'insertion et de mise à jour sont exécutées avec succès et validées au sein d'une seule transaction.

Avantages de l'utilisation d'une procédure stockée :

  • Évite la limitation de mettre à jour la même table dans un déclencheur.
  • Permet une plus grande flexibilité et un plus grand contrôle sur le transaction.
  • Facilite l'exécution de plusieurs opérations (par exemple, insertion et mise à jour) au sein d'une seule transaction.

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