Différences entre «Clé unique» et «Clé primaire»

Réponses:

20

Une table peut avoir au plus une PRIMARY KEYcontrainte mais elle peut en avoir autant que vous le souhaitez UNIQUE KEY.

Les colonnes faisant partie de la PRIMARY KEYdoivent être définies comme NOT NULL. Cela n'est pas requis pour les colonnes faisant partie des UNIQUE KEYcontraintes. Si les colonnes ne sont pas nulles, il n'y a aucune différence entre les clés uniques et primaires.

Une autre différence mineure est que vous pouvez choisir le nom que vous souhaitez pour une UNIQUE KEYcontrainte (et un index). D'autre part, l' PRIMARY KEYa le nom par défaut: PRIMARY.

ypercubeᵀᴹ
la source
5

Une différence majeure

  • La clé primaire interdit les colonnes annulables
  • La clé unique permet les colonnes nullables

Sinon, il n'y a pas beaucoup de différence ...

gbn
la source
4

Quelque chose que d'autres n'ont pas souligné:

  • Si vous ne déclarez pas explicitement un PK dans les tables InnoDB, il en créera un sous les couvertures pour vous. Vous ne pouvez pas accéder, commander ou filtrer par cette clé implicite. Cela a des ramifications en termes de ressources car chaque index secondaire contient un pointeur de copie vers le PK de la ligne.
atxdba
la source
3

La différence la plus importante réside dans leur objectif .

  • Clé primaire : Le but de la clé primaire est d'agir comme une «CLÉ». Une clé primaire est une clé dans une base de données relationnelle utilisée pour identifier les enregistrements.
  • Index unique : L'index unique est un «INDEX» destiné aux performances. L'optimiseur sait que pour une condition "où x =: x", il n'y aura qu'un seul enregistrement en conséquence - il peut donc préparer un plan adapté à cela.
  • Contrainte unique : il s'agit d'une «CONTRAINTE» qui garantit qu'il n'y a pas de valeurs en double dans cette colonne. C'est une contrainte pour l'intégrité des données.

Outre leur objectif, les points suivants sont à noter.

  • Sauf indication contraire, PRIMARY KEY essaiera de créer un CLUSTERED INDEX (ce point concerne cependant SQL Server, comme mentionné dans le commentaire)
  • Il ne peut y avoir qu'une seule CLÉ PRIMAIRE par table; mais il peut y avoir de nombreuses contraintes et index uniques
  • PRIMARY KEY n'est pas toujours null mais les colonnes avec une contrainte unique peuvent contenir des valeurs NULL
LCJ
la source
1
La question est étiquetée MySQL. Vous ne pouvez pas spécifier le contraire, si la table utilise le moteur InnoDB et possède une clé primaire, il s'agit de l'index cluster. Pas le choix. Peut-être que vous pensiez à SQL Server.
ypercubeᵀᴹ