Problem:
Du vill skapa en primärnyckel för en tabell i en databas.
Exempel:
Vi vill ha en primärnyckel för en tabell som heter product
.
Lösning 1 (ny tabell):
CREATE TABLE product ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, producer VARCHAR(100) NOT NULL, price DECIMAL(7,2) );
Diskussion:
För att skapa en ny tabell med en kolumn definierad som primärnyckel kan du använda nyckelordet PRIMARY KEY
i slutet av definitionen av den kolumnen. I vårt exempel skapar vi tabellen product
med en CREATE TABLE
sats, med namnen på kolumnerna och deras respektive datatyper inom parentes. Vi väljer kolumn-id som primärnyckel för den här tabellen, så vi anger PRIMARY KEY
i slutet av definitionen av denna kolumn.
Tänk på att du bara kan skapa en primärnyckel för en given tabell.
Lösning 2 (ny tabell):
CREATE TABLE product ( name VARCHAR(100) NOT NULL, producer VARCHAR(100) NOT NULL), price DECIMAL(7,2), PRIMARY KEY(name, producer) );
Diskussion:
Ett annat sätt att definiera en primärnyckel under skapandet av en ny tabell är med en PRIMARY KEY
klausul i slutet av kolumndefinitionerna. I det här fallet anger vi en eller flera kolumner som ett argument till PRIMARY KEY
klausul; dessa kolumner blir den primära nyckeln för tabellen.
Observera att detta tillvägagångssätt tillåter primärnycklar byggda med flera kolumner. I det här exemplet är primärnyckeln för tabellen product
bildas av två kolumner:name
och producer
.
Lösning 3 (befintlig tabell):
ALTER TABLE product ADD PRIMARY KEY (id);
Diskussion:
Det är också möjligt att definiera en primärnyckel för en befintlig tabell som ännu inte har en primärnyckel.
Här ändras tabellen med en ALTER TABLE
klausul. Tabellen (i vårt exempel, product
) är uppkallad efter nyckelordet ALTER TABLE
, sedan ADD PRIMARY KEY
klausul följer med namnet på kolumnen som ska användas som primärnyckel. Observera att tabellen redan måste finnas innan det här kommandot körs och tabellen får inte redan ha en primärnyckel.
Lösning 4 (befintlig tabell, primärnyckelbegränsning):
ALTER TABLE product ADD CONSTRAINT PK_product_id PRIMARY KEY (id);
Diskussion:
Använd en fråga som denna om du vill namnge en primärnyckelrestriktion för en befintlig tabell. Här är den primära nyckelbegränsningen, PK_product_id
, genereras från kolumnen id
. Om du inte anger begränsningsnamnet genererar databasen ett standard begränsningsnamn (namnet varierar beroende på databas).