sql >> Databasteknik >  >> RDS >> Sqlserver

MySQL - Betydelse av PRIMÄRNYCKEL, UNIK NYCKEL och NYCKEL när de används tillsammans när du skapar en tabell

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 :).



  1. Hur kan jag anropa en lagrad SQL-procedur med EntityFramework 7 och Asp.Net 5

  2. Välj sista raden i MySQL

  3. Hur väljer man mer än 1 post per dag?

  4. Hur man lagrar JSON-data i MySQL