CONSTRAINT-setning

En betingelse er lik 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.

Merknad: Microsoft Access-databasemotoren støtter ikke bruken av CONSTRAINT eller noen av uttrykkene for datadefinisjonsspråk, med databaser som ikke tilhører Microsoft Access. 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 tilordnes primærnøkkel.

unik1, unik2

Navnet på feltet eller feltene som skal tilordnes 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 sekundærnøkkel-felt som refererer til felt i en annen tabell.

sekundærtabell

Navnet på sekundærtabell som inneholder feltet eller feltene som er spesifisert ved sekundærfelt.

sekundærfelt1, sekundærfelt2

Navnet på feltet eller feltene i sekundærtabell angitt av ref1, ref2. Du kan utelate denne setningsdelen 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 et ALTER TABLE- eller CREATE TABLE-uttrykk 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 uttrykket ALTER TABLE eller CREATE TABLE.

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

  • Du kan bruke det UNIQUE-reserverte ordet for å 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 for alle feltene i indeksen være unike, selv om to eller flere poster har samme verdi i ett av feltene.

  • Du kan bruke ordene som er reservert med PRIMARY KEY for å tilordne ett felt eller et sett med felt i en tabell som en 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.

    Merknad: 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 ordene som er reservert med FOREIGN KEY for å tilordne et felt som en 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 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. Du kan for eksempel vurdere følgende definisjon for Kunder-tabellen:

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

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

Vurder følgende definisjon i Ordrer-tabellen, ved å bruke 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

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

NO INDEX-modifikatoren kan brukes for å hindre automatisk oppretting av indekser for sekundærnøkler. Denne typen sekundærnøkkeldefinisjon bør bare brukes i tilfeller der resultatverdiene for indeks 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. Hvis du beholder denne typen indeks, med rader som settes inn og slettes fra tabellen, reduseres ytelsen, og gir ingen fordeler.



Utvid ferdighetene dine
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.

×