Maison > base de données > tutoriel mysql > Comment puis-je définir une valeur de champ sur son ID dans MySQL à l'aide d'un déclencheur ?

Comment puis-je définir une valeur de champ sur son ID dans MySQL à l'aide d'un déclencheur ?

Mary-Kate Olsen
Libérer: 2024-11-10 14:29:03
original
943 Les gens l'ont consulté

How Can I Set a Field Value to Its ID in MySQL Using a Trigger?

Déclencheur MySQL pour définir la valeur du champ sur ID

Dans MySQL, il n'est pas possible de mettre à jour directement un champ avec la valeur de son ID en utilisant un déclencheur. En effet, les déclencheurs s'exécutent avant ou après l'insertion, la mise à jour ou la suppression d'une ligne, mais avant la génération de l'ID d'incrémentation automatique.

Pour obtenir le comportement souhaité, vous pouvez utiliser la solution de contournement suivante :

  1. Créez un déclencheur qui vérifie si la colonne group_id est nulle pour chaque ligne insérée.
  2. Si nulle, définissez la colonne group_id sur la valeur du id.
  3. Utilisez le type de déclencheur BEFORE INSERT, car il s'exécute avant que l'ID d'incrémentation automatique ne soit généré.

Voici l'instruction MySQL pour le déclencheur :

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
Copier après la connexion

Malheureusement, ce déclencheur ne fonctionnera pas pour le comportement souhaité car dans la phase BEFORE INSERT, la valeur d'ID générée automatiquement n'a pas encore été générée. Par conséquent, si group_id est nul, il sera par défaut NEW.id, qui est toujours 0.

Changer le déclencheur pour qu'il se déclenche pendant la phase AFTER INSERT ne fonctionnera pas non plus, car vous ne pouvez pas modifier les valeurs des colonnes après une ligne. a été inséré.

La seule solution est d'effectuer l'insertion puis de mettre à jour immédiatement la valeur group_id si elle n'est pas définie :

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();
Copier après la connexion

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