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
Patricia Arquetteoriginal
2024-11-03 08:57:291019parcourir

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

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;

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;

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!

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