Una chiave è solo un indice normale. Un modo per semplificare è pensarlo come un catalogo di carte in una biblioteca. Punta MySQL nella giusta direzione.
Una chiave univoca viene anche utilizzata per migliorare la velocità di ricerca, ma ha il vincolo che non ci possono essere elementi duplicati (non ci sono due xey dove x non è ye x == y).
Il manual spiega come segue:
un indice univoco crea un vincolo tale che tutti i valori dell'indice devono essere distinti. Si verifica un errore se si tenta di aggiungere una nuova riga con un valore della chiave corrispondente a una riga esistente. Questo vincolo non si applica ai valori NULL tranne per il motore di archiviazione BDB. Per gli altri motori, un indice UNIQUE consente più valori NULL per le colonne che possono contenereNULL. Se si specifica un valore di prefisso per una colonna in un indice UNIQUE, , i valori della colonna devono essere univoci all'interno del prefisso.
Una chiave primaria è una chiave univoca "speciale". Fondamentalmente è una chiave unica, tranne per il fatto che è usata per identificare qualcosa.
Il manuale spiega come utilizzare gli indici in generale: here.
In MSSQL, i concetti sono simili. Ci sono indici, vincoli univoci e chiavi primarie.
testato, ma credo che il MSSQL equivalente è:
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
Edit: il codice di cui sopra è testato per essere corretto; tuttavia, sospetto che ci sia una sintassi molto migliore per farlo. Sono passato un po 'da quando ho usato SQL server, e apparentemente ho dimenticato un bel po' :).
correlati: [? Parola chiave KEY di mySQL] (http://stackoverflow.com/q/924265/697449) Fondamentalmente 'KEY' è sinonimo di' index'. –