En nøgle er blot et normalt indeks. En vej over forenkling er at tænke på det som et kortkatalog på et bibliotek. Det peger MySQL i den rigtige retning.
En unik nøgle bruges også til forbedret søgehastighed, men den har den begrænsning, at der ikke må være duplikerede elementer (der er ikke to x og y, hvor x ikke er y og x ==y).
Manualen forklarer det som følger:
Et UNIKT indeks skaber en begrænsning, således at alle værdier i indekset skal være forskellige. Der opstår en fejl, hvis du forsøger at tilføje en ny række med en nøgleværdi, der matcher en eksisterende række. Denne begrænsning gælder ikke for NULL-værdier undtagen for BDB-lagermotoren. For andre motorer tillader aUNIQUE-indekset flere NULL-værdier for kolonner, der kan indeholde NULL. Hvis du angiver en præfiksværdi for en kolonne i et UNIKT indeks, skal kolonneværdierne være unikke i præfikset.
En primær nøgle er en 'særlig' unik nøgle. Det er dybest set en unik nøgle, bortset fra at den bruges til at identificere noget.
Manualen forklarer, hvordan indekser bruges generelt:her.
I MSSQL er koncepterne ens. Der er indekser, unikke begrænsninger og primære nøgler.
Utestet, men jeg tror, at MSSQL-ækvivalenten er:
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);
Rediger:koden ovenfor er testet for at være korrekt; Jeg formoder dog, at der er en meget bedre syntaks til at gøre det. Det er et stykke tid siden, jeg har brugt SQL server, og jeg har åbenbart glemt en del :).