web-dev-qa-db-fra.com

Différences entre "clé unique" et "clé primaire"

Quelles sont les principales différences entre Unique Key et Primary Key dans MySQL?

19
newuser

Une table peut avoir au plus un PRIMARY KEY contrainte mais il peut en avoir autant que vous voulez UNIQUE KEY contraintes.

Colonnes faisant partie du PRIMARY KEY doit être défini comme NOT NULL. Cela n'est pas requis pour les colonnes faisant partie de UNIQUE KEY contraintes. 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 un UNIQUE KEY contrainte (et index). En revanche, le PRIMARY KEY a le nom par défaut: PRIMARY.

24
ypercubeᵀᴹ

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 ...

7
gbn

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.
4
atxdba

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

  • 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.
  • nique Index: Unique Index est un "INDEX" destiné à la performance. 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: C'est une "CONTRAINTE" qui s'assure 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
3
LCJ