En nyckel är bara ett normalt index. En väg över förenkling är att tänka på det som en kortkatalog på ett bibliotek. Det pekar MySQL i rätt riktning.
En unik nyckel används också för förbättrad sökhastighet, men den har begränsningen att det inte kan finnas några duplicerade objekt (det finns inga två x och y där x inte är y och x ==y).
Handboken förklarar det på följande sätt:
Ett UNIKT index skapar en begränsning så att alla värden i indexet måste vara distinkta. Ett fel uppstår om du försöker lägga till en ny rad med ett nyckelvärde som matchar en befintlig rad. Denna begränsning gäller inte NULL-värden förutom för BDB-lagringsmotorn. För andra motorer tillåter aUNIQUE index flera NULL-värden för kolumner som kan innehålla NULL. Om du anger ett prefixvärde för en kolumn i ett UNIKT index måste kolumnvärdena vara unika inom prefixet.
En primärnyckel är en "speciell" unik nyckel. Det är i grunden en unik nyckel, förutom att den används för att identifiera något.
Manualen förklarar hur index används i allmänhet:här.
I MSSQL är koncepten liknande. Det finns index, unika begränsningar och primärnycklar.
Otestad, men jag tror att MSSQL-motsvarigheten är:
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:koden ovan testas för att vara korrekt; dock misstänker jag att det finns en mycket bättre syntax för att göra det. Det var ett tag sedan jag använde SQL-server, och tydligen har jag glömt en hel del :).