Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour la même table après une insertion sans erreur de déclenchement ?
Déclencheur pour la mise à jour de la même table après l'insertion : une approche alternative
Aperçu du problème
Vous chercher à implémenter un déclencheur sur la table ACCOUNTS qui met à jour une colonne dans la même table en fonction de la valeur edit_on d'une ligne nouvellement insérée. Cependant, vous rencontrez une erreur en raison de la restriction empêchant la mise à jour de la même table dans un déclencheur qui l'a invoqué.
Solution alternative : procédure stockée
Pour contourner cette limitation, une procédure stockée peut être utilisée pour effectuer à la fois les opérations d'insertion et de mise à jour au sein d'une seule transaction. Cette approche permet une validation manuelle des modifications, permettant ainsi les mises à jour souhaitées.
Mise en œuvre d'une procédure stockée
Voici un exemple de procédure stockée qui atteint votre objectif :
DELIMITER $$ CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT) BEGIN -- Insert new row into ACCOUNTS INSERT INTO ACCOUNTS (pk, user_id, edit_on, status) VALUES (new_pk, /* user_id */, NULL, 'A'); -- Update existing row in ACCOUNTS UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on; -- Commit transaction COMMIT; END$$ DELIMITER ;
Utilisation
Pour utiliser cette procédure stockée, appelez-la avec la clé primaire du ligne nouvellement insérée comme argument :
CALL InsertAndEditStatus(2147483726);
Cette procédure insérera une nouvelle ligne avec la clé primaire spécifiée et les valeurs par défaut, puis mettra à jour la ligne existante référencée par la colonne edit_on dans la ligne nouvellement insérée pour indiquer que il a été édité.
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!