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 ?
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 :
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!