Differenza tra chiave, chiave primaria, chiave univoca e indice in MySQL


250

Quando devo usare KEY, PRIMARY KEY, UNIQUE KEYe INDEX?


2
La chiave PRIMARY serve per identificare le righe, impedire l'inserimento di due righe con gli stessi dati identici ... La chiave INDEX serve per accelerare la ricerca (minimo lento nell'inserimento). Chiave UNICA per dati univoci in una colonna.
Hos Mercury,


Risposte:


303

KEYe INDEXsono sinonimi in MySQL. Intendono la stessa cosa. Nei database utilizzeresti gli indici per migliorare la velocità di recupero dei dati. Un indice è in genere creato su colonne utilizzate in JOIN, WHEREe ORDER BYle clausole.

Immagina di avere una tabella chiamata userse di cercare tutti gli utenti che hanno il cognome "Smith". Senza un indice, il database dovrebbe passare attraverso tutti i record della tabella: questo è lento, perché più record hai nel tuo database, più lavoro deve fare per trovare il risultato. D'altro canto, un indice consentirà al database di passare rapidamente alle pagine pertinenti in cui sono conservati i record "Smith". Questo è molto simile a come noi, umani, passiamo attraverso una directory della rubrica per trovare qualcuno con il cognome: non iniziamo a cercare nella directory da una copertina all'altra, finché abbiamo inserito le informazioni in un ordine che possiamo usare per saltare rapidamente alle pagine "S".

Le chiavi primarie e le chiavi univoche sono simili. Una chiave primaria è una colonna, o una combinazione di colonne, che può identificare in modo univoco una riga. È un caso speciale di chiave unica . Una tabella può avere al massimo una chiave primaria, ma più di una chiave univoca. Quando si specifica una chiave univoca su una colonna, nessuna riga distinta in una tabella può avere lo stesso valore.

Si noti inoltre che le colonne definite come chiavi primarie o chiavi univoche vengono automaticamente indicizzate in MySQL.


2
posso avere sia una chiave univoca che una chiave primaria con lo stesso valore?
AIUTO

58
@needHELP: se hai una tabella chiamata passengerscon i seguenti campi :, (id, first_name, last_name, age, passport_number)normalmente imposti la idcolonna come chiave primaria. Una chiave primaria è automaticamente una chiave univoca. La differenza principale è che è possibile avere solo una chiave primaria nella tabella e che la colonna non può contenere NULLvalori. Non è necessario impostare la idcolonna UNIQUEperché, impostandola su una chiave primaria, si garantisce automaticamente che sia unica ... Quindi è possibile impostare anche passport_numberin UNIQUEmodo che non più di un passeggero ...
Daniel Vassallo

32
... sarebbe in grado di avere lo stesso numero di passaporto. Tuttavia potresti avere alcuni passeggeri (bambini ad esempio) senza un numero di passaporto. In tal caso, è possibile inserire NULLin quella colonna, senza problemi.
Daniel Vassallo,

2
@DanielVassallo Mi piace il modo in cui lo cancelli tra i sinonimi utilizzati da MySQL.
SIFE

1
Una delle migliori spiegazioni. Grazie mille :-)
Ravi Hirani,

61

KEY e INDEX sono sinonimi.

È necessario aggiungere un indice quando le misurazioni delle prestazioni e EXPLAIN mostrano che la query è inefficiente a causa di un indice mancante. L'aggiunta di un indice può migliorare le prestazioni delle query (ma può rallentare le modifiche alla tabella).

È necessario utilizzare UNIQUE quando si desidera che i valori in quella colonna (o colonne) siano univoci, in modo che i tentativi di inserire valori duplicati generino un errore.

Un PRIMARY KEY è sia un vincolo univoco che implica anche che la colonna NON sia NULL. È usato per dare un'identità ad ogni riga. Ciò può essere utile per unire un'altra tabella tramite un vincolo di chiave esterna. Sebbene non sia necessario che una tabella abbia una CHIAVE PRIMARIA, di solito è una buona idea.


CHIAVE PRIMARIA è usata per dare un'identità ad ogni riga? spiega scusa per la mia ignoranza.
AIUTO

@needHELP: viene utilizzato come modo per identificare in modo univoco qualsiasi riga della tabella. Ad esempio, se si desidera eliminare una riga specifica nella tabella, è utile disporre di un modo per identificarla in modo univoco in modo da non eliminare accidentalmente la riga errata. È anche utile per unirsi a un'altra tabella in quanto è indicizzata.
Mark Byers,

48

La chiave primaria non consente i NULLvalori, ma la chiave univoca consente i NULLvalori.

Possiamo dichiarare solo una chiave primaria in una tabella, ma una tabella può avere più chiavi univoche (assegnazione di colonna).


17

PRIMARY KEYE UNIQUE KEYsono simili tranne che ha funzioni diverse. La chiave primaria rende unica la riga della tabella (ovvero, non ci possono essere 2 righe con la stessa chiave esatta). È possibile avere solo 1 chiave primaria in una tabella del database.

La chiave univoca rende unica la colonna della tabella in una riga della tabella (ovvero, nessuna riga di 2 tabelle può avere lo stesso valore esatto). Puoi avere più di 1 colonna di tabella chiavi univoca (a differenza della chiave primaria che significa che solo 1 colonna di tabella nella tabella è unica).

INDEXcrea anche unicità. MySQL (esempio) creerà una tabella di indicizzazione per la colonna indicizzata. In questo modo, è più semplice recuperare il valore della riga della tabella quando la query viene interrogata su quella colonna della tabella indicizzata. Lo svantaggio è che se si eseguono molti aggiornamenti / eliminazioni / creazioni, MySQL deve gestire le tabelle di indicizzazione (e questo può essere un collo di bottiglia delle prestazioni).

Spero che questo ti aiuti.


Inoltre, UNIQUE KEYpuò essere NULLma PRIMARY KEYnon può essere NULL.
Rafay

10

Tasti univoci: le colonne in cui non sono simili due righe

Chiave primaria: raccolta del numero minimo di colonne che può identificare in modo univoco ogni riga di una tabella (ovvero che non ci sono due righe simili in tutte le colonne che costituiscono la chiave primaria). In una tabella possono essere presenti più chiavi primarie. Se esiste una chiave univoca, allora è la chiave primaria (non "la" chiave primaria) nella tabella. Se non esiste una chiave univoca, saranno necessari più valori di una colonna per identificare una riga come (first_name, last_name, father_name, mother_name) in alcune tabelle può costituire la chiave primaria.

Indice: utilizzato per ottimizzare le query. Se hai intenzione di cercare o ordinare i risultati sulla base di alcune colonne più volte (ad es. La maggior parte delle persone cercherà gli studenti per nome e non per il loro numero di rotolo), allora può essere ottimizzato se i valori della colonna sono tutti " indicizzato "ad esempio con un algoritmo ad albero binario.


Penso che volevi dire che in un tavolo può esserci solo un PK
Răzvan Flavius ​​Panda,

7

Chiave primaria : possiamo mettere solo una chiave primaria su una tabella in una tabella e non possiamo lasciare vuota quella colonna quando inseriamo i valori nella tabella.

Chiave univoca: possiamo inserire più di una chiave univoca in una tabella e possiamo lasciare vuota quella colonna quando inseriamo i valori nella tabella. colonna accetta valori univoci (non uguali) quando abbiamo applicato la chiave primaria e unica.


la tabella ha solo una CHIAVE PRIMARIA, ma le chiavi uniche sono più di una.
VIKASH,

6

La chiave primaria viene utilizzata per lavorare con tabelle diverse. Questa è la base dei database relazionali. Se hai un database di libri è meglio creare 2 tabelle - 1) libri e 2) autori con chiave primaria INT "id". Quindi usi id nei libri anziché nel nome degli autori.

La chiave univoca viene utilizzata se non si desidera avere voci ripetute. Ad esempio, potresti avere il titolo nella tabella del tuo libro e vuoi essere sicuro che ci sia una sola voce per ogni titolo.


2

Chiave unica:

  1. Più di un valore può essere nullo.
  2. Non ci sono due tuple che possono avere gli stessi valori in chiave univoca.
  3. Una o più chiavi univoche possono essere combinate per formare una chiave primaria, ma non viceversa.

Chiave primaria

  1. Può contenere più di una chiave univoca.
  2. Rappresenta in modo univoco una tupla.
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.