Maison >base de données >tutoriel mysql >Comment définir par défaut un champ sur l'ID généré automatiquement dans MySQL à l'aide de déclencheurs ?

Comment définir par défaut un champ sur l'ID généré automatiquement dans MySQL à l'aide de déclencheurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 22:14:031042parcourir

How to Default a Field to the Auto-Generated ID in MySQL Using Triggers?

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 :

  • Si group_id est fourni, ne le modifiez pas.
  • Si group_id est omis, définissez-le sur la valeur du nouveau identifiant généré.

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 :

  1. Créez un déclencheur BEFORE INSERT pour définir group_id sur id si group_id n'est pas spécifié :
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
  1. Étant donné que MySQL n'autorise pas les modifications des valeurs de colonne après INSERT, une instruction UPDATE doit être exécutée immédiatement après l'insertion pour gérer les cas où group_id a été omis :
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!

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