Différence entre la clé, la clé primaire, la clé unique et l'index dans MySQL


250

Quand dois - je utiliser KEY, PRIMARY KEY, UNIQUE KEYet INDEX?


2
La clé PRIMARY sert à identifier les lignes, empêche d'insérer deux lignes avec les mêmes données identiques ... La clé INDEX sert à accélérer la recherche (insertion lente et minimale). Clé UNIQUE pour des données uniques dans une colonne.
Hos Mercury


Réponses:


303

KEYet INDEXsont des synonymes dans MySQL. Ils signifient la même chose. Dans les bases de données, vous utiliseriez des index pour améliorer la vitesse de récupération des données. Un index est généralement créé sur les colonnes utilisées dans JOIN, WHEREet les ORDER BYclauses.

Imaginez que vous ayez une table appelée userset que vous vouliez rechercher tous les utilisateurs qui ont le nom de famille «Smith». Sans index, la base de données devrait parcourir tous les enregistrements de la table: c'est lent, car plus il y a d'enregistrements dans votre base de données, plus il faut de travail pour trouver le résultat. D'un autre côté, un index aidera la base de données à passer rapidement aux pages pertinentes où se trouvent les enregistrements «Smith». Cela ressemble beaucoup à la façon dont nous, les humains, parcourons un annuaire téléphonique pour trouver quelqu'un par le nom de famille: nous ne commençons pas à parcourir le répertoire de couverture en couverture, tant que nous insérons les informations dans un ordre que nous pouvons permet de passer rapidement aux pages «S».

Les clés primaires et les clés uniques sont similaires. Une clé primaire est une colonne, ou une combinaison de colonnes, qui peut identifier de manière unique une ligne. Il s'agit d'un cas particulier de clé unique . Une table peut avoir au plus une clé primaire, mais plus d'une clé unique. Lorsque vous spécifiez une clé unique sur une colonne, deux lignes distinctes dans une table ne peuvent pas avoir la même valeur.

Notez également que les colonnes définies comme clés primaires ou clés uniques sont automatiquement indexées dans MySQL.


2
puis-je avoir à la fois une clé unique et une clé primaire avec la même valeur?
AIDEZ

58
@needHELP: Si vous avez une table appelée passengersavec les champs suivants :, vous devez (id, first_name, last_name, age, passport_number)normalement configurer la idcolonne comme clé primaire. Une clé primaire est automatiquement une clé unique. La principale différence est que vous ne pouvez avoir qu'une seule clé primaire sur la table et que la colonne ne peut pas contenir de NULLvaleurs. Il n'est pas nécessaire de configurer la idcolonne pour être UNIQUEparce qu'en la définissant sur une clé primaire, elle est automatiquement garantie d'être unique ... Ensuite, vous pouvez également définir passport_numberpour UNIQUEque pas plus d'un passager ...
Daniel Vassallo

32
... pourrait avoir le même numéro de passeport. Cependant, vous pourriez avoir des passagers (des enfants par exemple) sans numéro de passeport. Dans ce cas, vous pouvez insérer NULLsans problème dans cette colonne.
Daniel Vassallo

2
@DanielVassallo J'aime la façon dont vous effacez les synonymes utilisés par MySQL.
SIFE

1
L'une des meilleures explications. Merci beaucoup :-)
Ravi Hirani

61

KEY et INDEX sont synonymes.

Vous devez ajouter un index lorsque les mesures de performances et EXPLAIN vous montrent que la requête est inefficace en raison d'un index manquant. L'ajout d'un index peut améliorer les performances des requêtes (mais il peut ralentir les modifications apportées à la table).

Vous devez utiliser UNIQUE lorsque vous souhaitez limiter les valeurs de cette colonne (ou colonnes) pour qu'elles soient uniques, de sorte que les tentatives d'insertion de valeurs en double entraînent une erreur.

Une CLÉ PRIMAIRE est à la fois une contrainte unique et cela implique également que la colonne n'est PAS NULL. Il est utilisé pour donner une identité à chaque ligne. Cela peut être utile pour se joindre à une autre table via une contrainte de clé étrangère. Bien qu'il ne soit pas nécessaire qu'une table ait une CLÉ PRIMAIRE, c'est généralement une bonne idée.


PRIMARY KEY est utilisé pour donner une identité à chaque ligne? expliquer désolé pour mon ignorance.
AIDEZ

@needHELP: Il est utilisé comme moyen d'identifier de manière unique n'importe quelle ligne de votre table. Par exemple, si vous souhaitez supprimer une ligne spécifique de votre tableau, il est utile d'avoir un moyen de l'identifier sans ambiguïté afin de ne pas supprimer accidentellement la mauvaise ligne. Il est également utile pour se joindre à une autre table lors de son indexation.
Mark Byers

48

La clé primaire n'autorise pas les NULLvaleurs, mais la clé unique autorise les NULLvaleurs.

Nous ne pouvons déclarer qu'une seule clé primaire dans une table, mais une table peut avoir plusieurs clés uniques (affectation de colonne).


17

PRIMARY KEYET UNIQUE KEYsont similaires, sauf qu'ils ont des fonctions différentes. La clé primaire rend la ligne du tableau unique (c'est-à-dire qu'il ne peut pas y avoir 2 lignes avec exactement la même clé). Vous ne pouvez avoir qu'une seule clé primaire dans une table de base de données.

Une clé unique rend la colonne de table dans une ligne de table unique (c'est-à-dire qu'aucune ligne de 2 tables ne peut avoir la même valeur exacte). Vous pouvez avoir plus d'une colonne de table de clés unique (contrairement à la clé primaire qui signifie qu'une seule colonne de table dans la table est unique).

INDEXcrée également l'unicité. MySQL (exemple) créera une table d'indexation pour la colonne indexée. De cette façon, il est plus facile de récupérer la valeur de ligne de table lorsque la requête est interrogée sur cette colonne de table indexée. L'inconvénient est que si vous effectuez de nombreuses mises à jour / suppression / création, MySQL doit gérer les tables d'indexation (et cela peut être un goulot d'étranglement des performances).

J'espère que cela t'aides.


En outre, UNIQUE KEYpeut être , NULLmais PRIMARY KEYne peut pas être NULL.
Rafay

10

Clés uniques: les colonnes dans lesquelles deux lignes ne sont pas similaires

Clé primaire: collection d'un nombre minimum de colonnes qui peut identifier de manière unique chaque ligne d'une table (c'est-à-dire qu'il n'y a pas deux lignes similaires dans toutes les colonnes constituant la clé primaire). Il peut y avoir plusieurs clés primaires dans une table. S'il existe une clé unique, c'est la clé primaire (et non "la" clé primaire) dans la table. S'il n'existe pas de clé unique, plusieurs valeurs de colonne seront nécessaires pour identifier une ligne telle que (prénom, nom, père, mère) dans certaines tables peut constituer la clé primaire.

Index: utilisé pour optimiser les requêtes. Si vous allez rechercher ou trier les résultats sur la base de certaines colonnes plusieurs fois (par exemple, la plupart des gens vont rechercher les étudiants par leur nom et non par leur numéro de rôle), alors il peut être optimisé si les valeurs de la colonne sont toutes " indexé "par exemple avec un algorithme d'arbre binaire.


Je pense que vous vouliez dire qu'il ne peut y avoir qu'un seul PK dans une table
Răzvan Flavius ​​Panda

7

Clé primaire - nous ne pouvons mettre qu'une seule clé primaire sur une table dans une table et nous ne pouvons pas laisser cette colonne vide lorsque nous entrons les valeurs dans la table.

Clé unique - nous pouvons mettre plus d'une clé unique sur une table et nous pouvons laisser cette colonne vide lorsque nous entrons les valeurs dans la table. La colonne prend des valeurs uniques (pas les mêmes) lorsque nous avons appliqué la clé primaire et unique.


La table n'a qu'une seule CLÉ PRIMAIRE, mais les clés uniques sont plus d'une.
VIKASH

6

La clé primaire est utilisée pour travailler avec différentes tables. C'est le fondement des bases de données relationnelles. Si vous avez une base de données de livres, il est préférable de créer 2 tableaux - 1) livres et 2) auteurs avec la clé primaire INT "id". Ensuite, vous utilisez id dans les livres au lieu du nom des auteurs.

La clé unique est utilisée si vous ne souhaitez pas que les entrées soient répétées. Par exemple, vous pouvez avoir un titre dans votre tableau de livres et vous assurer qu'il n'y a qu'une seule entrée pour chaque titre.


2

Clé unique:

  1. Plusieurs valeurs peuvent être nulles.
  2. Deux tuples ne peuvent pas avoir les mêmes valeurs dans une clé unique.
  3. Une ou plusieurs clés uniques peuvent être combinées pour former une clé primaire, mais pas l'inverse.

Clé primaire

  1. Peut contenir plusieurs clés uniques.
  2. Représente uniquement un tuple.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.