Maison > base de données > tutoriel mysql > le corps du texte

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
Libérer: 2024-11-06 22:14:03
original
975 Les gens l'ont consulté

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
Copier après la connexion
  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();
Copier après la connexion

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!

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