2010-10-02 12 views
204

Quando dovrei usare KEY, PRIMARY KEY, UNIQUE KEY e INDEX?Differenza tra chiave, chiave primaria, chiave univoca e indice in MySQL

+1

Il tasto PRIMARIO serve per identificare le righe, evitare di inserire due righe con gli stessi dati identici ... Il tasto INDICE è per accelerare la ricerca (minimo lento nell'inserimento). Chiave UNICA per dati univoci in una colonna. –

+1

Dai un'occhiata a http://dba.stackexchange.com/questions/15572/differenze-tra-unicum-key-and-primary-key/149580#149580. E http://stackoverflow.com/questions/1401572/what-are-differences-tra i-index-vs-key-in-mysql/19345477#19345477 – Lijo

+0

Possibile duplicato di [Differenze tra INDICE, PRIMARIO, UNICO, FULLTEXT in MySQL ?] (https://stackoverflow.com/questions/707874/differences-between-index-primary-unique-fulltext-in-mysql) – thomasrutter

risposta

48

CHIAVE e INDICE 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 controbilanciare i valori in tale colonna (o colonne) in modo univoco, in modo che i tentativi di inserimento di 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à a ciascuna riga. Questo può essere utile per entrare in un'altra tabella tramite un vincolo di chiave esterna. Sebbene non sia necessario che un tavolo abbia un PRIMARY KEY, di solito è una buona idea.

+0

PRIMARY KEY è usato per dare un'identità a ciascuna riga? spiegare scusa per la mia ignoranza. – HELP

+0

@needHELP: è usato come un modo per identificare in modo univoco qualsiasi riga nella tabella. Ad esempio, se si desidera eliminare una riga specifica nella tabella, è utile avere un modo per identificarla in modo univoco in modo da non eliminare accidentalmente la riga errata. È anche utile per entrare in un altro tavolo quando viene indicizzato. –

253

KEY e INDEX sono sinonimi in MySQL. Intendono la stessa cosa. Nei database si utilizza indexes per migliorare la velocità di recupero dei dati. Un indice viene in genere creato sulle colonne utilizzate nelle clausole JOIN, WHERE e ORDER BY.

Immagina di avere un tavolo chiamato users e di voler 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 si hanno nel proprio database, maggiore è il lavoro che deve fare per trovare il risultato. D'altro canto, un indice aiuterà il database a saltare rapidamente alle pagine pertinenti in cui sono conservati i record "Smith". Questo è molto simile al modo in cui noi umani passiamo attraverso una rubrica telefonica per trovare qualcuno con il cognome: non iniziamo a cercare attraverso la directory da una copertina all'altra, finché abbiamo inserito le informazioni in un ordine che possiamo utilizzare 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 unique key. Una tabella può avere al massimo una chiave primaria, ma più di una chiave univoca. Quando si specifica una chiave univoca in una colonna, non esistono due righe distinte in una tabella che possono avere lo stesso valore.

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

+0

Posso avere sia una chiave univoca che una chiave primaria con lo stesso valore? – HELP

+0

@needHELP: dipende. Intendi su colonne diverse? ... Puoi fare un esempio? –

+0

la stessa colonna e tabella – HELP

15

PRIMARY KEY E UNIQUE KEY sono simili tranne che ha diverse funzioni. La chiave primaria rende la riga della tabella univoca (cioè, non può esserci una riga con la stessa chiave esatta). È possibile avere solo 1 chiave primaria in una tabella di database.

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

INDEX crea anche unicità. MySQL (esempio) creerà una tabella di indicizzazione per la colonna che viene indicizzata. In questo modo, è più facile 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/eliminazione/creazione, MySQL deve gestire le tabelle di indicizzazione (e ciò può essere un collo di bottiglia delle prestazioni).

Spero che questo aiuti.

+0

Inoltre, 'UNIQUE KEY' può essere' NULL' ma 'PRIMARY KEY' non può essere' NULL'. – Rafay

10

chiavi univoche: Le colonne in cui non ci sono due righe sono simili

Chiave primaria: Insieme di numero minimo di colonne che possono identificare univocamente ogni riga in una tabella (cioè senza due file sono simili in tutte le colonne che costituiscono chiave primaria). Ci possono essere più di una chiave primaria in una tabella. Se esiste una chiave univoca, allora è la chiave primaria (non la "chiave primaria") nella tabella. Se non esiste una chiave univoca, sarà necessario più di una colonna per identificare una riga come (first_name, last_name, father_name, mother_name) in alcune tabelle può costituire una chiave primaria.

Index: utilizzato per ottimizzare le query. Se stai cercando o ordinando i risultati sulla base di alcune colonne molte volte (ad esempio, la maggior parte delle persone cercherà gli studenti per nome e non per il loro numero di ripetizione), allora può essere ottimizzato se i valori della colonna sono tutti " indicizzato "ad esempio con un algoritmo ad albero binario.

+0

Penso che intendessi dire che ci può essere solo un PK in una tabella. La tabella –

6

Chiave primaria - possiamo mettere solo una chiave primaria su una tabella in una tabella e non possiamo lasciare la colonna vuota quando stiamo inserendo i valori nella tabella.

Chiave univoca - possiamo mettere più di una chiave univoca su una tabella e possiamo lasciare quella colonna vuota quando inseriamo i valori nella tabella. La colonna assume valori univoci (non uguali) quando abbiamo applicato la chiave univoca & primaria.

+0

ha solo una PRIMARY KEY, ma le chiavi univoche sono più di una. – VIKASH

37

La chiave primaria non consente il valore nullo ma la chiave univoca consente il valore null.

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

4

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 la chiave primaria INT "id". Quindi si utilizza l'id nei libri al posto del nome dell'autore.

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

10

Sia la chiave primaria che la chiave univoca vengono utilizzate per applicare l'unicità di una colonna. Quindi, quando scegli l'una rispetto all'altra?

Una tabella può avere solo una chiave primaria. Se si desidera applicare l'univocità su 2 o più colonne, viene utilizzato il vincolo di chiave univoco.

Differenza tra il vincolo di chiave primaria e il vincolo di chiave Univoco?

1. Una tabella può avere una sola chiave primaria, ma più tasti

2. chiave primaria unica non consente i null, dove tonalità unico permette uno nullo

+4

In realtà in MySQL una colonna con un [contraint unico consente più di un 'NULL'] (http://stackoverflow.com/a/3712251/1326147), ciò è estremamente utile in alcuni casi. – Armfoot

1

chiave univoca:

  1. più di un valore può essere nullo.
  2. Nessuna tupla può avere gli stessi valori nella 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 un chiavi univoche.
  2. Rappresenta in modo univoco una tupla.