Maison > base de données > tutoriel mysql > Comment implémenter l'incrémentation automatique SERIAL personnalisée dans les catégories d'une base de données ?

Comment implémenter l'incrémentation automatique SERIAL personnalisée dans les catégories d'une base de données ?

Patricia Arquette
Libérer: 2025-01-14 08:27:43
original
317 Les gens l'ont consulté

How to Implement Custom SERIAL Auto-Increment within Categories in a Database?

Regrouper par valeur pour implémenter l'incrémentation automatique du SERIAL personnalisé

Défi :

Dans un système de blog, vous disposez d'un tableau d'articles avec trois colonnes : id (séquence), catégorie (varchar) et catégorie_id (int). Vous souhaitez que lecategory_id s'incrémente automatiquement dans chaque catégorie tout en restant unique dans la table.

Invalidité de la logique personnalisée :

Essayer d'implémenter cela à l'aide de deux requêtes et d'un code logique distincts peut entraîner des problèmes de concurrence dans un environnement multi-utilisateurs.

Solution recommandée :

Rejeter la colonnecategory_id :

  • Supprimez la colonnecategory_id car elle ne fournit aucune information supplémentaire en dehors des colonnes id etcategory.
  • Utilisez la colonne id à incrémentation automatique comme identifiant unique de l'article.

Calcul dynamique de la position de la catégorie :

  • Si vous avez encore besoin d'identifiants spécifiques à une catégorie, utilisez la fonction row_number() pour calculer la position de chaque article dans une catégorie :
SELECT id, category, ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS category_id
FROM article;
Copier après la connexion

Exemple :

INSERT INTO article(category) VALUES ('stackoverflow');
Copier après la connexion

Résultat :

<code>SELECT * FROM article WHERE category = 'stackoverflow';
+----+-----------+---------+
| id  | category  | category_id |
+----+-----------+---------+
| 10  | stackoverflow | 1 |
| 11  | stackoverflow | 2 |
+----+-----------+---------+</code>
Copier après la connexion

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 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