CONSTRAINT-sats

En villkor liknar ett index, fast den kan även användas för att upprätta en relation med en annan tabell.

Du använder CONSTRAINT-satsen i ALTER TABLE- och CREATE TABLE-instruktioner för att skapa eller ta bort begränsningar. Det finns två typer av CONSTRAINT-satser: en för att skapa en begränsning för ett enstaka fält och ett för att skapa en begränsning för fler än ett fält.

Obs!: Microsoft Access-databasmotorn stöder inte användningen av CONSTRAINT-instruktioner eller någon annan av DDL-instruktionerna med andra databaser än Microsoft Access-databaser. Använd DAO-genereringsmetoder i stället.

Syntax

Begränsning för enstaka fält:

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

Begränsning för flera fält:

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-satsen består av följande delar:

Element

Beskrivning

name

Namnet på begränsningen som ska skapas.

primary1, primary2

Namnet på det eller de fält som primärnyckel kan anges för.

unique1, unique2

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

notnull1, notnull2

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

ref1, ref2

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

foreigntable

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

foreignfield1, foreignfield2

Namnet på det eller de fält i foreigntable som anges av ref1, ref2. Du kan hoppa över den här satsen om det refererade fältet är primärnyckeln för foreigntable.


Kommentarer

Du använder syntaxen för en begränsning för ett enstaka fält i fältdefinitionssatsen för en ALTER TABLE- eller CREATE TABLE-instruktion som följer omedelbart efter specifikationen för fältets datatyp.

Du använder syntaxen för en flerfältsbegränsning när du använder reserverat ord CONSTRAINT utanför en fältdefinitionssats i en ALTER TABLE- eller CREATE TABLE-instruktion.

Med hjälp av CONSTRAINT kan du ange ett fält som någon av följande typer av begränsningar:

  • Du kan använda det reserverade ordet UNIQUE för att ange ett fält som en unik nyckel. Det innebär att det inte kan förekomma två poster i tabellen som har samma värde i fältet. Du kan begränsa vilket fält eller vilken lista med fält du vill som unikt. Om en flerfältsbegränsning har angetts som en unik nyckel måste de kombinerade värdena i alla fälten i indexet vara unika, även om två eller flera poster har samma värde i bara det ena av fälten.

  • Du kan använda det reserverade ordet PRIMARY KEY för att ange ett fält eller en uppsättning fält i en tabell som en primär nyckel. Alla värden i den primära nyckeln måste vara unika och inte Null, och det får bara finnas en primär nyckel för en tabell.

    Obs!: Ange inte en PRIMARY KEY-begränsning i en tabell som redan har en primärnyckel; om du gör det uppstår ett fel.

  • Du kan använda det reserverade ordet FOREIGN KEY för att ange ett fält som sekundärnyckel. Om sekundärtabellens primärnyckel består av fler än ett fält måste du använda en flerfältsbegränsningsdefinition med en lista över alla referensfält, namnet på sekundärtabellen och namnen på referensfälten i sekundärtabellen i samma ordning som referensfälten visas. Om referensfältet eller referensfälten är sekundärtabellens primärnyckel måste du inte ange referensfälten. Som standard fungerar databasmotorn som om sekundärtabellens primärnyckeln är referensfälten.

    Sekundärnyckelbegränsningar definierar specifika åtgärder som ska utföras när ett motsvarande primärnyckelvärde ändras:

  • Du kan ange åtgärder som ska utföras på sekundärtabellen baserat på en motsvarande åtgärd som utförs för en primärnyckel i tabellen där CONSTRAINT definieras. Begrunda till exempel följande definition för tabellen Kunder:

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

Tänk på följande definition i tabellen Order, som anger en sekundärnyckelrelation som refererar 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

Både en ON UPDATE CASCADE-sats och en ON DELETE CASCADE-sats definieras i sekundärnyckeln. ON UPDATE CASCADE-satsen innebär att om identifieraren för en kund (CustId) uppdateras i tabellen Kunder görs uppdateringen i hela tabellen Order. Alla order som innehåller ett motsvarande kundidentifierarvärde uppdateras automatiskt med det nya värdet. ON DELETE CASCADE-satsen innebär att om en kund tas bort från tabellen Kunder tas även alla rader i tabellen Order som innehåller samma kundidentifierarvärde bort.

Titta nu på en annan definition i tabellen Order där åtgärden SET NULL används i stället för CASCADE-åtgärden:

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-satsen innebär att om identifieraren för en kund (CustId) uppdateras i tabellen Kunder anges motsvarande sekundärnyckelvärden i tabellen Order till NULL. På samma sätt innebär ON UPDATE SET NULL-satsen att om en kund tas bort från tabellen Kunder anges alla motsvarande sekundärnyckelvärden i tabellen Order automatiskt till NULL.

Om du vill förhindra att automatiska index för sekundärnycklar skapas kan du använda modifieraren NO INDEX. Den här formen av sekundärnyckeldefinition bör bara användas där de resulterande indexvärdena annars blir frekvent dubblerade. I sådana fall där värdena i ett sekundärnyckelindex frekvent dubbleras kan det vara effektivare att bara utföra en tabellsökning än att använda ett index. Att underhålla den här typen av index där rader infogas och tas bort från tabellen försämrar prestandan och medför inga fördelar.



Utöka dina Office-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.

×