Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

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 en 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 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 ska 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 de reserverade orden 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ärnyckel 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 de reserverade orden 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ärnyckel ä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 för tabellen Orders, som anger en sekundärnyckelrelation som refererar till primärnyckeln i tabellen Customers:

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 för 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 för tabellen Orders 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 Orders automatiskt till NULL. På samma sätt innebär ON DELETE 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 index för sekundärnycklar skapas automatiskt 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.



Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×