Maison >base de données >tutoriel mysql >Comment implémenter une colonne de séquence dépendante d'une clé étrangère dans MySQL ?

Comment implémenter une colonne de séquence dépendante d'une clé étrangère dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 03:02:02320parcourir

How to Implement a Sequence Column Dependent on a Foreign Key in MySQL?

MySQL : Etablir une colonne de séquence dépendante d'un champ étranger

Dans le domaine de la gestion de bases de données, il devient parfois impératif de modifier l'existant structures pour répondre aux nouvelles exigences en matière de données. Tel est le cas lorsqu'un numéro de séquence doit être attribué aux enregistrements en fonction d'une clé étrangère spécifique.

Considérez une table avec les colonnes ID, ACCOUNT et some_other_stuff. L'objectif est d'introduire une nouvelle colonne, SEQ, qui s'incrémente de manière unique pour chaque valeur de COMPTE distincte, comme ceci :

ID     ACCOUNT     SEQ     some_other_stuff
1      1           1       ...
2      1           2       ...
3      1           3       ...
4      2           1       ...
5      2           2       ...
6      1           4       ...

Solution basée sur SQL :

MySQL nous donne des déclencheurs, un mécanisme puissant pour exécuter automatiquement des actions prédéfinies lors d'événements de manipulation de données. Dans ce cas, un déclencheur peut être utilisé pour remplir la colonne SEQ avec les valeurs appropriées lors de l'insertion de l'enregistrement. Le code du déclencheur :

CREATE TRIGGER trg_mytable_bi
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
      DECLARE nseq INT;
      SELECT COALESCE(MAX(seq), 0) + 1
      INTO nseq
      FROM mytable
      WHERE account = NEW.account;
      SET NEW.seq = nseq;
END;

Répartition :

  • Le déclencheur trg_mytable_bi est invoqué avant chaque opération INSERT sur la mytable.
  • À l'intérieur le déclencheur, nseq est déclaré comme une variable entière.
  • Une sous-requête récupère la valeur séquentielle maximale pour le compte correspondant et y ajoute 1, générant ainsi le numéro de séquence suivant. Cette valeur est stockée dans nseq.
  • Enfin, NEW.seq (la valeur seq pour le nouvel enregistrement) est définie sur nseq, garantissant un séquençage approprié.

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