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
Mary-Kate Olsenoriginal
2024-11-10 14:29:03904parcourir

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

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();

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