Déclencheur MySQL pour définir par défaut un champ sur la valeur de l'ID généré automatiquement
Dans MySQL, il est possible de créer des déclencheurs pour effectuer des opérations sur les données de la table avant ou après les modifications. Un cas d'utilisation courant consiste à attribuer par défaut à un champ la valeur de la clé primaire (ID) générée automatiquement dans les situations où elle reste nulle lors de l'insertion.
Énoncé du problème :
Pour y parvenir, considérons un tableau avec trois colonnes : id (clé primaire), group_id (entier) et value (varchar). L'objectif est d'avoir le comportement suivant lors de l'insertion de l'enregistrement :
Implémentation du déclencheur :
Bien qu'il soit souhaitable d'effectuer cette opération dans une seule instruction ou un seul déclencheur, les limitations de MySQL l'empêchent. Une solution de contournement consiste à utiliser une approche en deux étapes :
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable FOR EACH ROW BEGIN SET NEW.group_id = COALESCE(NEW.group_id, NEW.id); END
INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a'); UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();
Limitations :
Il est important de noter que le déclencheur BEFORE INSERT ne peut pas accéder à la valeur d'identifiant nouvellement générée car elle n'a pas encore été attribuée. Cependant, utiliser le déclencheur AFTER INSERT pour accéder à la valeur générée n'est pas une option car les valeurs des colonnes ne peuvent pas être modifiées au cours de cette phase.
Par conséquent, l'approche en deux étapes présentée ci-dessus fournit une solution au comportement souhaité dans MySQL. .
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!