recherche
Maisonbase de donnéestutoriel mysqlComment puis-je mettre à jour la même table dans un déclencheur MySQL après une opération INSERT ?

How Can I Update the Same Table Within a MySQL Trigger After an INSERT Operation?

Limitations des déclencheurs dans MySQL : mise à jour de la même table

Les déclencheurs MySQL fournissent un mécanisme pour effectuer des actions automatisées basées sur des événements de base de données. Cependant, il existe des limites à l'utilisation de déclencheurs pour mettre à jour la même table à l'origine de l'événement. Cela est dû à la restriction qui empêche un déclencheur de modifier une table déjà utilisée par l'instruction qui a invoqué le déclencheur.

Énoncé du problème

Dans le document fourni Dans ce scénario, la tâche consiste à mettre à jour une ligne spécifique dans une table ACCOUNTS lorsqu'une nouvelle ligne est insérée dans la même table. Cependant, la mise à jour doit être effectuée sur une ligne existante où la clé primaire (pk) correspond à la valeur edit_on de la nouvelle ligne.

Implémentation du déclencheur

Le déclencheur proposé la syntaxe vise à répondre à cette exigence :

DELIMITER $$

DROP TRIGGER IF EXISTS `setEditStatus`$$
CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS
FOR EACH ROW BEGIN
    update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ;
END$$

DELIMITER ;

Exécution Erreur

Malheureusement, l'exécution de ce déclencheur entraîne une erreur en raison de la restriction mentionnée précédemment : "Impossible de mettre à jour la table COMPTES... déjà utilisée par l'instruction qui a invoqué ce déclencheur."

Solution de contournement utilisant une procédure stockée

Étant donné que les déclencheurs ne peuvent pas être utilisés à cette fin, une approche alternative consiste à créer une procédure stockée. Une procédure stockée permet d'effectuer plusieurs opérations au sein d'une seule transaction, y compris l'insertion dans la table ACCOUNTS et la mise à jour de la ligne existante.

Ce qui suit est un exemple de procédure stockée qui accomplit la tâche :

CREATE PROCEDURE `updateAccountStatus` (IN NEW_ROW_ID INT)
BEGIN
    -- Insert into the ACCOUNTS table
    INSERT INTO ACCOUNTS (user_id, edit_on, status)
    VALUES (NEW.user_id, NEW.edit_on, 'A');

    -- Update the existing row
    UPDATE ACCOUNTS SET status = 'E' WHERE pk = NEW_ROW_ID;

    -- Commit the changes
    COMMIT;
END

En appelant la procédure stockée avec l'ID de la ligne nouvellement insérée, les opérations d'insertion et de mise à jour peuvent être exécutées en une seule transaction, en contournant la limitation du déclencheur.

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
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
Quelles sont les limites de l'utilisation de vues dans MySQL?Quelles sont les limites de l'utilisation de vues dans MySQL?May 14, 2025 am 12:10 AM

MySQLViewShavelimitations: 1) Theydon'tsupportalLSQLOPERations, restreignantDatamanipulation à travers la vue

Sécuriser votre base de données MySQL: ajouter des utilisateurs et accorder des privilègesSécuriser votre base de données MySQL: ajouter des utilisateurs et accorder des privilègesMay 14, 2025 am 12:09 AM

La bonne gestion de la gestion de la direction

Quels facteurs influencent le nombre de déclencheurs que je peux utiliser dans MySQL?Quels facteurs influencent le nombre de déclencheurs que je peux utiliser dans MySQL?May 14, 2025 am 12:08 AM

MySQLDOES NONTIMPOSEAHARDLIMITORSTRIGRERS, BUTPRATICALFACTORSEDERTERMINETHEIREFFECTYUSE: 1) ServerConfiguration ImpactStriggerManagement; 2) ComplexTriggersInCreasgeSystemload; 3) LargerTableSlowtriggerPerformance; 4) HighCunCurrencyCanCauseTr fichestring; 5) M) M

MySQL: Est-il sûr de stocker blob?MySQL: Est-il sûr de stocker blob?May 14, 2025 am 12:07 AM

Oui, il estafetostoreblobdatainmysql, maisonssider cesfacteurs: 1) stockage: BlobScConSugnifants espace, potentiellement en augmentation

MySQL: ajout d'un utilisateur via une interface Web PHPMySQL: ajout d'un utilisateur via une interface Web PHPMay 14, 2025 am 12:04 AM

L'ajout d'utilisateurs de MySQL via l'interface Web PHP peut utiliser les extensions MySQLI. Les étapes sont les suivantes: 1. Connectez-vous à la base de données MySQL et utilisez l'extension MySQLI. 2. Créez un utilisateur, utilisez l'instruction CreateUser et utilisez la fonction Password () pour crypter le mot de passe. 3. Empêchez l'injection SQL et utilisez la fonction mysqli_real_escape_string () pour traiter l'entrée de l'utilisateur. 4. Attribuez des autorisations aux nouveaux utilisateurs et utilisez la déclaration de subvention.

MySQL: Blob et autres stockages sans SQL, quelles sont les différences?MySQL: Blob et autres stockages sans SQL, quelles sont les différences?May 13, 2025 am 12:14 AM

MySQL'sblobissuitable ForstoringBinaryDatawithInarelationDatabase, WhileLenosqloloptionsLikEmongoDB, redis et Cassandraofferflexible, ScalablesButions forununstructureddata.blobissimplerbutcanslowdownporduit

MySQL Ajouter un utilisateur: syntaxe, options et meilleures pratiques de sécuritéMySQL Ajouter un utilisateur: syntaxe, options et meilleures pratiques de sécuritéMay 13, 2025 am 12:12 AM

ToaddauserRinmysql, utilisation: CreateUser'Username '@' host'identifiedBy'password '; ici'showtodoitsecurely: 1) ChoosetheHostCarelyToCon trolaccess.2) setResourcelimits withoptionslikemax_queries_per_hour.3) usestrong, uniquepasswords.4) Enforcessl / tlsconnectionwith

MySQL: Comment éviter les types de données de chaîne des erreurs courantes?MySQL: Comment éviter les types de données de chaîne des erreurs courantes?May 13, 2025 am 12:09 AM

ToavoidcomMonmistakeswithstringDatatyPesInmysql, compréhension de compréhension, chooseTherightType, andManageEncodingAndCollationSettingSeffectively.1) usECHARFORFIXED-LEGLINGSTRING

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.