Delsætningen CONSTRAINT

En begrænsning svarer til et indeks, men den kan også bruges til at etablere et relation til en anden tabel.

Du kan bruge CONSTRAINT-delsætningen i ALTER TABLE- og CREATE TABLE-sætningerne til at oprette eller slette begrænsninger. Der findes to typer CONTRAINT-delsætninger: én beregnet til at oprette en begrænsning i et enkelt felt og én til at oprette en begrænsning på flere end ét felt.

Bemærk: Microsoft Access-databaseprogrammet understøtter ikke brugen af CONSTRAINT, eller nogen andre sproglige datadefinitionssætninger, med ikke-Microsoft Access-databaser. Brug DAO Create-metoder i stedet.

Syntaks

Enkeltfeltsbegrænsning:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Flerfeltsbegrænsning:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT-delsætningen har følgende dele:

Del

Beskrivelse

name

Navnet på den begrænsning, der skal oprettes.

primary1, primary2

Navnet på det eller de felter, der skal angives som primær nøgle.

unique1, unique2

Navnet på det eller de felter, der skal angives som en entydig nøgle.

notnull1, notnull2

Navnet på det eller de felter, der er begrænset til værdier, der ikke er Null.

ref1, ref2

Navnet på et fremmed nøgle-felt eller -felter, der refererer til felter i en anden tabel.

foreigntable

Navnet på den fremmed tabel med det eller de felter, der er angivet i foreignfield.

foreignfield1, foreignfield2

Navnet på det eller de felter i foreigntable, der er angivet i ref1, ref2. Du kan udelade denne delsætning, hvis det refererede felt er den primære nøgle for foreigntable.


Bemærkninger

Du kan bruge syntaksen for en enkeltfeltsbegrænsning i feltdefinitionsdelsætningen i en ALTER TABLE- eller CREATE TABLE-sætning, der følger umiddelbart efter specifikationen af feltets datatype.

Du kan bruge syntaksen for en flerfeltsbegrænsning, når du bruger reserveret ord CONSTRAINT uden for en feltdefinitionsdelsætning i en ALTER TABLE- eller CREATE TABLE-sætning.

Du kan bruge CONSTRAINT til at angive et felt som en af de følgende begrænsningstyper:

  • Du kan bruge det reserverede ord UNIQUE til at angive et felt som en entydig nøgle. Det betyder, at der ikke kan være to poster i tabellen med samme værdi i feltet. Du kan begrænse alle felter eller liste over felter som værende entydige. Hvis en flerfeltsbegrænsning er angivet som en entydig nøgle, skal de kombinerede værdier af alle felter i indekset være entydige, selvom to eller flere poster har den samme værdi i kun et af felterne.

  • Du kan bruge de reserverede ord PRIMARY KEY til at angive et felt eller et sæt af felter i en tabel som en primær nøgle. Alle værdier i den primære nøgle skal være entydige og ikke Null, og der kan kun være én primær nøgle for en tabel.

    Bemærk: Undlad at angive en PRIMARY KEY-begrænsning i en tabel, der allerede har en primær nøgle. Hvis du gør det, opstår der en fejl.

  • Du kan bruge de reserverede ord FOREIGN KEY til at angive et felt som en fremmed nøgle. Hvis den fremmede tabels primære nøgle består af mere end ét felt, skal du bruge en flerfeltsbegrænsningsdefinition med en liste over alle referencefelterne, navnet på den fremmede tabel og navnene på referencefelterne i den fremmede tabel i den samme rækkefølge, som referencefelterne står i på listen. Hvis referencefeltet eller -felterne er den fremmede tabels primære nøgle, behøver du ikke angive referencefelterne. Som standard fungerer databaseprogrammet, som om den fremmede tabels primære nøgle er referencefelterne.

    Fremmed nøgle-begrænsninger definerer bestemte handlinger, der skal udføres, når en tilsvarende primærnøgleværdi ændres:

  • Du kan angive handlinger, der skal udføres på den fremmede tabel baseret på en tilsvarende handling, der er udført på en primær nøgle i tabellen, hvor CONSTRAINT er defineret. Se f.eks. følgende definition af tabellen Customers:

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

Se følgende definition af tabellen Orders, der definerer en fremmed nøgle-relation med reference til den primære nøgle i Customers-tabellen:

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

Både en ON UPDATE CASCADE- og en ON DELETE CASCADE-delsætning er defineret på den fremmede nøgle. Delsætningen ON UPDATE CASCADE betyder, at hvis en kundes id (CustId) opdateres i Customer-tabellen, bliver opdateringen videreført til Orders-tabellen. Hver ordre, der indeholder en tilsvarende kunde-id-værdi, bliver automatisk opdateret med den nye værdi. Delsætningen ON DELETE CASCADE betyder, at hvis en kunde slettes fra tabellen Customer, så slettes alle rækker i tabellen Orders, der indeholder den samme kunde-id-værdi også.

Se den følgende anderledes definition af tabellen Orders ved hjælp af SET NULL-handlingen i stedet for CASCADE-handlingen:

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

Delsætningen ON UPDATE SET NULL betyder, at hvis en kundes id (CustId) opdateres i tabellen Customer, så indstilles de tilsvarende fremmede nøgle-værdier i tabellen Orders automatisk til NULL. Tilsvarende betyder delsætningen ON DELETE SET NULL, at hvis en kunde slettes fra tabellen Customer, så indstilles alle de tilsvarende fremmede nøgler i tabellen Orders automatisk til NULL.

For at forhindre automatisk oprettelse af indeks for fremmede nøgler kan man bruge modifikatoren NO INDEX. Denne form for fremmed nøgle-definition bør kun bruges i tilfælde, hvor de resulterende indeksværdier hyppigt bliver duplikeret. Hvis værdierne i et fremmed nøgle-indeks hyppigt duplikeres, kan det være mindre effektivt end blot at udføre en tabelscanning. Vedligeholdelse af denne type af indeks, med rækker der indsættes i og slettes fra tabellen, forringer ydeevnen og giver ingen fordel.



Udvid dine færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Bliv Office Insider

Var disse oplysninger nyttige?

Tak for din feedback!

Tak for din feedback! Det lyder, som om det vil kunne hjælpe, hvis du bliver sat i forbindelse med en af vores Office-supportteknikere.

×