Maison > base de données > tutoriel mysql > Pouvez-vous incrémenter automatiquement les clés non primaires dans MySQL InnoDB ?

Pouvez-vous incrémenter automatiquement les clés non primaires dans MySQL InnoDB ?

Mary-Kate Olsen
Libérer: 2024-11-03 04:23:03
original
361 Les gens l'ont consulté

Can You Auto-Increment Non-Primary Keys in MySQL InnoDB?

MySQL InnoDB : auto-incrémentation des clés non primaires

Dans le moteur de stockage InnoDB de MySQL, la clé primaire est généralement auto-incrémentée. Cependant, il est également possible d'incrémenter automatiquement une clé non primaire.

L'énoncé du problème

Un schéma de base de données comprend deux tables : "book_comments" et "book_comments_votes". La table "book_comments" a une colonne de clé non primaire "comment_id" qui doit être auto-incrémentée pour des raisons de cohérence avec la table "book_comments_votes", qui contient une référence à "comment_id" comme clé primaire.

Une solution

Pour auto-incrémenter une clé non primaire, il faut la déclarer sous forme d'index. Voici un exemple :

<code class="mysql">CREATE TABLE `book_comments` (
  `book_id` MEDIUMINT NOT NULL,
  `timestamp` MEDIUMINT NOT NULL,
  `user_id` MEDIUMINT NOT NULL,
  `vote_up` SMALLINT,
  `vote_down` SMALLINT,
  `comment` TEXT,
  `comment_id` MEDIUMINT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`book_id`, `timestamp`, `user_id`),
  KEY `comment_id` (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;</code>
Copier après la connexion

Alternatives et discussion

Bien que la création d'un index simple sur la clé non primaire soit la solution la plus simple, certaines alternatives existent :

  • Faire de comment_id la clé primaire : Cela nécessite la création d'un index unique supplémentaire sur (book_id, timestamp, user_id) pour maintenir l'intégrité.
  • Stockage de l'intégralité de la clé primaire dans book_comments_votes : Cela augmente considérablement la taille de la table.

Cependant, la solution recommandée reste de créer un index unique sur la clé non primaire et d'éviter les inconvénients des alternatives. Cette approche offre à la fois simplicité et intégrité sans sacrifier les performances ou l'efficacité du stockage des données.

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