Maison > base de données > tutoriel mysql > Comment puis-je utiliser à la fois une colonne à incrémentation automatique et une clé primaire différente dans MySQL ?

Comment puis-je utiliser à la fois une colonne à incrémentation automatique et une clé primaire différente dans MySQL ?

Patricia Arquette
Libérer: 2024-11-03 08:57:29
original
1023 Les gens l'ont consulté

How can I use both an auto-increment column and a different primary key in MySQL?

MySQL : défis liés à l'auto-incrémentation et à la coexistence de clés primaires

MySQL présente un défi lorsqu'on tente de définir à la fois une colonne d'auto-incrémentation et une clé primaire qui ne l'est pas la colonne d’auto-incrémentation. Par défaut, MySQL stipule qu'il ne peut y avoir qu'une seule colonne à incrémentation automatique et qu'elle doit être désignée comme clé primaire. Cela peut prêter à confusion lorsque l'on tente d'optimiser les performances des tables et l'efficacité de la récupération des données.

Étude de cas : Table de gestion des membres

Considérons l'exemple suivant : une table de membres avec la colonne id marquée comme auto- incrément pour faciliter la surveillance visuelle, tandis que la colonne memberid sert de clé primaire pour l'identification des membres dans les requêtes. L'objectif est de maintenir la fonctionnalité d'incrémentation automatique tout en établissant l'ID de membre comme clé primaire.

Erreur rencontrée

La tentative de création de la table avec PRIMARY KEY (memberid) entraîne l'erreur :

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Copier après la connexion

Solutions potentielles

Malgré l'erreur, il est possible d'avoir à la fois une colonne à incrémentation automatique et une clé primaire différente. Voici deux approches viables :

1. Indexez la colonne d'incrémentation automatique

Créez un index sur la colonne id pour permettre une récupération efficace basée à la fois sur l'identifiant et l'ID de membre. La définition de table modifiée ressemblerait à ceci :

CREATE TABLE members (
  `id` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,
  `memberid` VARCHAR( 30 ) NOT NULL ,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `firstname` VARCHAR( 50 ) NULL ,
  `lastname` VARCHAR( 50 ) NULL ,
  PRIMARY KEY (`memberid`),
  KEY (`id`)
) ENGINE = MYISAM;
Copier après la connexion

2. Intégrer la colonne d'incrémentation automatique à la clé primaire

Redéfinissez la table pour inclure la colonne id dans le composite de clé primaire, en faisant à la fois id et memberid les facteurs déterminants pour l'identification de la clé primaire. La définition modifiée devient :

CREATE TABLE members (
  `id` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,
  `memberid` VARCHAR( 30 ) NOT NULL ,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `firstname` VARCHAR( 50 ) NULL ,
  `lastname` VARCHAR( 50 ) NULL ,
  PRIMARY KEY (`id`, `memberid`)
) ENGINE = MYISAM;
Copier après la connexion

En implémentant l'une de ces approches, vous pouvez équilibrer le besoin d'une colonne à incrémentation automatique pour plus de commodité visuelle et l'utilisation d'une clé personnalisée (identifiant de membre) pour une identification efficace des membres dans requêtes, sans compromettre les performances de la table.

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