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