Differenze tra "Chiave unica" e "Chiave primaria"


Risposte:


20

Una tabella può avere al massimo un PRIMARY KEYvincolo ma può averne quanti ne desideri UNIQUE KEY.

Le colonne che fanno parte di PRIMARY KEYdevono essere definite come NOT NULL. Ciò non è necessario per le colonne che fanno parte dei UNIQUE KEYvincoli. Se le colonne non sono nullabili, non vi è alcuna differenza tra chiavi univoche e chiavi primarie.

Un'altra differenza minore è che puoi scegliere il nome desiderato per un UNIQUE KEYvincolo (e indice). D'altra parte, il PRIMARY KEYha il nome di default: PRIMARY.


5

Una grande differenza

  • La chiave primaria non consente colonne nullable
  • La chiave univoca consente colonne nullable

Altrimenti, non c'è molta differenza ...


4

Qualcosa che altri non hanno sottolineato:

  • Se non dichiari esplicitamente un PK nelle tabelle InnoDB, ne verrà creato uno sotto le copertine. Non è possibile accedere, ordinare o filtrare con questa chiave implicita. Questo ha ramificazioni in termini di risorse poiché ogni indice secondario contiene un puntatore alla copia del PK della riga.

3

La differenza più importante è nel loro scopo .

  • Chiave primaria : lo scopo della chiave primaria è quello di fungere da "CHIAVE". Una chiave primaria è una chiave in un database relazionale utilizzata per identificare i record.
  • Indice unico : L'indice unico è un "INDICE" destinato alla performance. L'ottimizzatore sa che per una condizione "dove x =: x" ci sarà un solo record come risultato, quindi può preparare un piano adatto a quello.
  • Vincolo univoco : è un "VINCITORE" che assicura che non vi siano valori duplicati in quella colonna. È un vincolo per l'integrità dei dati.

A parte il loro scopo, i seguenti punti sono degni di nota.

  • Salvo diversamente specificato, PRIMARY KEY tenterà di creare un INDICE CLUSTERATO (Questo punto riguarda SQL Server, tuttavia, come menzionato nel commento)
  • Può esserci un solo TASTO PRIMARIO per tabella; ma possono esserci molti vincoli unici e indici univoci
  • PRIMARY KEY non è sempre nullo ma le colonne con vincolo univoco possono contenere valori NULL

1
La domanda è taggata MySQL. Non è possibile specificare diversamente, se la tabella utilizza il motore InnoDB e ha una chiave primaria, questo è l'indice cluster. Nessuna scelta. Forse stavi pensando a SQL Server.
ypercubeᵀᴹ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.