Office
Logg på

CONSTRAINT-setning

En betingelse ligner på en indeks, men den kan også brukes til å opprette en relasjon med en annen tabell.

Du kan bruke CONSTRAINT-setningen i uttrykkene ALTER TABLE og CREATE TABLE til å opprette eller slette begrensninger. Det finnes to typer CONSTRAINT-setninger, én for å opprette en begrensning på ett enkelt felt og én for å opprette en begrensning på flere felt.

Obs!: Microsoft Access-databasemotoren støtter ikke bruken av CONSTRAINT eller noen av uttrykkene i datadefinisjonsspråk sammen med andre databaser enn Microsoft Access-databaser. Bruk i stedet DAO-opprettelsesmetodene.

Syntaks

Begrensning av ett felt:

CONSTRAINT navn {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES sekundærtabell [(sekundærfelt1, sekundærfelt2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Begrensning av flere felt:

CONSTRAINT navn
{PRIMARY KEY (primær1[, primær2 [, ...]]) |
UNIQUE (unik1[, unik2 [, ...]]) |
NOT NULL (ikkenull1[, ikkenull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES sekundærtabell [(sekundærfelt1 [, sekundærfelt2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT-setningen har disse delene:

Del

Beskrivelse

Navn

Navnet på begrensningen som skal opprettes.

primær1, primær2

Navnet på feltet eller feltene som skal brukes som primærnøkkel.

unik1, unik2

Navnet på feltet eller feltene som skal brukes som en unik nøkkel.

ikkenull1, ikkenull2

Navnet på feltet eller feltene som er begrenset til ikke-nullverdier.

ref1, ref2

Navnet på ett eller flere felt med en sekundærnøkkel som refererer til felt i en annen tabell.

sekundærtabell

Navnet på sekundærtabellen som inneholder feltet eller feltene som er angitt av sekundærfelt.

sekundærfelt1, sekundærfelt2

Navnet på feltet eller feltene i sekundærtabell angitt av ref1, ref2. Du kan utelate denne setningen hvis det refererte feltet er primærnøkkelen for sekundærtabell.


Kommentarer

Du kan bruke syntaksen for en begrensning for ett felt i feltdefinisjonssetningen i en ALTER TABLE- eller CREATE TABLE-setning rett etter spesifikasjonen av feltets datatype.

Du kan bruke syntaksen for en begrensning for flere felt når du bruker reservert ord CONSTRAINT utenfor en feltdefinisjonssetning i en ALTER TABLE- eller CREATE TABLE-setning.

Når du bruker CONSTRAINT, kan du tilordne et felt som én av følgende typer begrensninger:

  • Du kan bruke det reserverte ordet UNIQUE til å tilordne et felt som en unik nøkkel. Dette betyr at ingen poster i tabellen kan ha samme verdi i dette feltet. Du kan begrense et hvilket som helst felt eller en liste over felt som unikt. Hvis en begrensning for flere felt er tilordnet som en unik nøkkel, må de kombinerte verdiene i alle feltene i indeksen være unike, selv om to eller flere poster har samme verdi i bare ett av feltene.

  • Du kan bruke de reserverte ordene PRIMARY KEY til å tilordne ett felt eller et sett med felt i en tabell som primærnøkkel. Alle verdier i primærnøkkelen må være unike og ikke Null, og det kan bare være én primærnøkkel for en tabell.

    Obs!: Du kan ikke angi en PRIMARY KEY-begrensning på en tabell som allerede har en primærnøkkel. Hvis du gjør det, oppstår det en feil.

  • Du kan bruke de reserverte ordene FOREIGN KEY til å tilordne et felt som sekundærnøkkel. Hvis primærnøkkelen for sekundærtabellen består av mer enn ett felt, må du bruke en begrensingsdefinisjon for flere felt som lister opp alle feltene det refereres til, navnet på sekundærtabellen og navnene på feltene det refereres til i sekundærtabellen. De må være oppført i samme rekkefølge som feltene det refereres til. Hvis feltet eller feltene det refereres til, er primærnøkkelen for sekundærtabellen, trenger du ikke å spesifisere feltene det refereres til. Som standard oppfører databasemotoren seg som om primærnøkkelen for sekundærtabellen er de feltene det refereres til.

    Begrensninger for sekundærnøkkel definerer bestemte handlinger som skal utføres når en tilsvarende primærnøkkelverdi endres:

  • Du kan spesifisere handlinger som skal utføres i sekundærtabellen, basert på en tilsvarende handling utført i en primærnøkkel i tabellen der CONSTRAINT er definert. Se for eksempel følgende definisjon for Customers-tabellen:

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

Se følgende definisjon for Orders-tabellen, som definerer en sekundærnøkkelrelasjon som refererer til primærnøkkelen 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 setningen ON UPDATE CASCADE og ON DELETE CASCADE er definert i sekundærnøkkelen. Setningen ON UPDATE CASCADE betyr at hvis en kundeidentifikator (CustId) oppdateres i Customers-tabellen, blir oppdateringen også brukt i Orders-tabellen. Hver ordre som inneholder en tilsvarende kundeidentifikatorverdi, oppdateres automatisk med den nye verdien. Setningen ON DELETE CASCADE betyr at hvis en kunde slettes fra Customers-tabellen, vil alle radene i Orders-tabellen som inneholder den samme kundeidentifikatorverdien, også bli slettet.

Se følgende definisjon i Orders-tabellen, som bruker 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

Setningen ON UPDATE SET NULL betyr at hvis en kundeidentifikator (CustId) oppdateres i Customers-tabellen, blir de tilsvarende sekundærnøkkelverdiene i Orders-tabellen automatisk satt til NULL. Og setningen ON DELETE SET NULL betyr at hvis en kunde blir slettet fra Customers-tabellen, blir de tilsvarende sekundærnøklene i Orders-tabellen automatisk satt til NULL.

Modifikatoren NO INDEX kan brukes til å hindre automatisk oppretting av indekser for sekundærnøkler. Denne typen sekundærnøkkeldefinisjon bør bare brukes i tilfeller der de resulterende indeksverdiene dupliseres ofte. Der verdiene i en sekundærnøkkelindeks dupliseres ofte, kan bruk av en indeks være mindre effektivt enn bare å utføre en tabellskanning. Vedlikehold av denne typen indeks, med rader som settes inn og slettes fra tabellen, reduserer ytelsen og gir ingen fordeler.



Bli bedre på Office
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Office Insiders

Var denne informasjonen nyttig?

Takk for tilbakemeldingen!

Takk for tilbakemeldingen! Det høres ut som det kan være lurt å sette deg i kontakt med én av våre Office-kundestøtteagenter.

×