CONSTRAINT-satser

Viktigt!: Den här artikeln är maskinöversatt, se ansvarsfriskrivningen. Den engelska versionen av den här artikeln finns här för din referens.

En CONSTRAINT-sats (villkor) fungerar ungefär på samma sätt som ett index, med den skillnaden att den även kan användas för att definiera en relation (kallas även referensattribut) med en annan tabell.

Du kan använda en CONSTRAINT-sats i ett ALTER TABLE- eller CREATE TABLE-kommando för att skapa eller ta bort restriktioner. Det finns två olika typer av CONSTRAINT-satser: ett som skapar en restriktion för ett fält och en som skapar en restriktion för fler än ett fält.

Obs!: Microsoft Access-databasmotorn stöder inte användning av VILLKOR eller andra data definition language uttryck, med Microsoft Access-databaser. Använda metoderna DAO skapa i stället.

Syntax

Restriktion för ett fält:

CONSTRAINT namn {PRIMÄRNYCKEL | UNIKA | INTE NULL |
REFERENSER foreignTabell [(sekundärfält1, sekundärfält2)]
[vidare UPDATE ÖVERLAPPANDE | ANGE NULL]
[vidare ta BORT ÖVERLAPPANDE | ANGE NULL]}

Restriktion för flera fält:

CONSTRAINT namn
{PRIMÄRNYCKEL (primär1[, primär2 [,...]]) |
UNIKA (unik1[, unik2 [,...]]) |
INTE NULL (ickenull1[, notnull2 [,...]]) |
SEKUNDÄRNYCKEL [INGET INDEX] (ref1[, ref2 [,...]]) REFERENSER sekundärtabell [(sekundärfält1 [, sekundärfält2 [,...]])]
[Vidare UPDATE ÖVERLAPPANDE | ANGE NULL]
[vidare ta BORT ÖVERLAPPANDE | ANGE NULL]}

En CONSTRAINT-sats består av följande syntaktiska element:

Element

Beskrivning

namn

Namnet på den restriktion som ska skapas.

primär1, primär2

Namnet på det eller de fält som ska användas som primärnyckel.

unik1, unik2

Namnet på det eller de fält som ska vara en unik nyckel.

ickenull1, ickenull2

Namnet på det eller de fält som är begränsade till Null-värden.

ref1, ref2

Namnet på en sekundärnyckel som refererar till fält i en annan tabell.

sekundärtabell

Namnet på den sekundärtabell som innehåller det eller de fält som anges av sekundärfält.

sekundärfält1, sekundärfält2

Namnet på det eller de fält i sekundärtabell som anges av ref1 och ref2. Du kan utelämna namnet om det refererade fältet är primärnyckel i sekundärtabell.


Kommentarer

Du använder syntaxen för en restriktion för ett fält i fältdefinitionssatsen i ett ALTER TABLE- eller CREATE TABLE-kommando omedelbart efter fältets datatyp.

Du kan använda syntaxen för en flerfältsrestriktion när du använder det reserverat ord CONSTRAINT utanför en fältdefinition i ett ALTER TABLE- eller CREATE TABLE-kommando.

Med CONSTRAINT kan du definiera ett fält som en av följande typer av restriktioner:

  • Du kan använda det reserverade ordet UNIQUE för att definiera ett fält som en unik nyckel. Detta innebär att det inte kan finnas två fält i tabellen med identiska värdet i fältet. Du kan definiera ett enskilt fält som unikt, eller en lista på fält som unika. Om en flerfältsrestriktion definieras som en unik nyckel måste de kombinerade värdena i fälten vara unika, även om två eller flera poster kan ha samma värde i ett av fälten.

  • Du kan använda de reserverade orden PRIMARY KEY för att definiera ett eller flera fält i tabellen som primärnyckel. Alla värden i primärnyckeln måste vara unika och skilda från Null, och varje tabell kan ha högst en primärnyckel.

    Obs!: Du kan inte använda restriktionen PRIMARY KEY i en tabell som redan innehåller en primär nyckel.

  • Du kan använda de reserverade orden FOREIGN KEY för att definiera ett fält som en sekundärnyckel. Om sekundärtabellens primärnyckel består av fler än ett fält måste du använda en flerfältsrestriktion där alla de refererade fälten ingår, samt sekundärtabellens namn och namnen på de refererade fälten i sekundärtabellen i samma ordning som de refererande fälten. Om de refererade fälten är sekundärtabellens primärnyckel behöver du inte ange de refererade fälten. Om fälten utelämnas behandlar databasmotorn sekundärtabellens primärnyckel som refererade fält.

    Restriktioner med sekundärnycklar definierar vilka åtgärder som ska vidtas när motsvarande primärnyckel ändras:

  • Du kan ange vad som ska ske med en sekundärtabell när en åtgärd utförs på primärnyckeln i den tabell där restriktionen är definierad. Anta att tabellen Kunder är definierad på följande sätt:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Anta vidare att tabellen Order är definierad på följande sätt, med en sekundärnyckelrelation som refererar till primärnyckeln i tabellen Kunder:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

För sekundärnyckeln är både ON UPDATE CASCADE och ON DELETE CASCADE definierat. Satsen ON UPDATE CASCADE innebär att om ett kundnummer (Kundnr) uppdateras i tabellen Kunder, kommer uppdateringen att genomföras även i tabellen Order. I varje orderpost finns ett kundnummer som uppdateras automatiskt med det nya värdet. Satsen ON DELETE CASCADE innebär att om en kund tas bort från tabellen Kunder, kommer alla posterna i tabellen Order med det kundnumret också att tas bort.

Anta att tabellen Order är definierad på följande sätt, med åtgärden SET NULL i stället för CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Satsen ON UPDATE SET NULL betyder att om ett kundnummer (Kundnr) uppdateras i tabellen Kunder, kommer motsvarande sekundärnyckelvärden i tabellen Order att automatiskt få värdet NULL. På samma sätt anger satsen ON DELETE SET NULL att alla motsvarande sekundärnycklar i tabellen Order får värdet NULL om en kund raderas från tabellen Kunder.

Du kan förhindra att index för sekundärnycklar skapas automatiskt genom att använda NO INDEX. Den här typen av definition av sekundärnyckel bör endast användas om de resulterande indexvärdena annars skulle innehålla ett stort antal dubbletter. Om ett sekundärnyckelindex innehåller ett stort antal dubbletter, kan en indexsökning vara mindre effektiv än en vanlig tabellsökning utan index. Prestandakostnaden för att underhålla den här typen av index när rader läggs till och tas bort från tabellen uppväger inte de eventuella fördelarna ett index kan ge.



Obs!: Ansvarsfriskrivning för maskinöversättning: Den här artikeln har översatts av ett datorsystem utan mänsklig inblandning. Microsoft erbjuder dessa maskinöversättningar för att hjälpa icke engelskspråkiga användare att ta del av information om Microsofts produkter, tjänster och tekniker. Eftersom artikeln är maskinöversatt kan den innehålla fel i ordval, syntax och grammatik.

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×