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 ?

Comment puis-je mettre à jour la même table après une insertion sans erreur de déclenchement ?

Barbara Streisand
Libérer: 2024-12-10 22:22:10
original
837 Les gens l'ont consulté

How Can I Update the Same Table After an Insert Without Trigger Errors?

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

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

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!

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