SQL Server FOREIGN KEY (Svenska)
sammanfattning: i den här handledningen lär du dig hur du använder SQL Server foreign key constraint för att genomdriva en länk mellan data i två tabeller.
introduktion till SQL Server foreign key constraint
överväga följandevendor_groups
ochvendors
tabeller:
varje leverantör tillhör en leverantörsgrupp och varje leverantörsgrupp kan ha noll eller fler leverantörer. Förhållandet mellan tabellernavendor_groups
ochvendors
är en till många.,
för varje rad i tabellen vendors
kan du alltid hitta en motsvarande rad i tabellen vendor_groups
.
med inställningen för aktuella tabeller kan du dock infoga en rad i tabellenvendors
utan motsvarande rad i tabellenvendor_groups
. På samma sätt kan du också ta bort en rad i tabellenvendor_groups
utan att uppdatera eller radera motsvarande rader i tabellenvendors
som resulterar i föräldralösa rader i tabellenvendors
.,
för att genomdriva länken mellan data i tabellernavendor_groups
ochvendors
måste du upprätta en utländsk nyckel i tabellenvendors
.
en främmande nyckel är en kolumn eller en grupp kolumner i en tabell som unikt identifierar en rad i en annan tabell (eller samma tabell vid självreferens).
för att skapa en utländsk nyckel använder du begränsningen FOREIGN KEY
.,
följande uttalanden släppervendors
– tabellen och återskapar den med enFOREIGN KEY
– begränsningen:
tabellenvendor_groups
kallas nu den överordnade tabellen som är tabellen som den utländska nyckelbegränsningen refererar till. Tabellenvendors
kallas den underordnade tabellen som är tabellen för vilken den utländska nyckelbegränsningen tillämpas.,
i uttalandet ovan skapar följande klausul en FOREIGN KEY
begränsning som heter fk_group
som länkar group_id
I tabellen vendors
till tabellen group_id
I tabellen vendor_groups
tabell:
SQL Server foreign key constraint syntax
den allmänna syntaxen för att skapa en FOREIGN KEY
begränsning är som följer:
låt oss undersöka denna syntax i detalj.,
Ange förstFOREIGN KEY
begränsningsnamn efterCONSTRAINT
nyckelordet. Begränsningsnamnet är valfritt därför är det möjligt att definiera en FOREIGN KEY
begränsning enligt följande:
i detta fall genererar SQL Server automatiskt ett namn för begränsningen FOREIGN KEY
.
För det andra, ange en lista med kommaseparerade utländska nyckelkolumner som omges av parenteser efter nyckelordetFOREIGN KEY
.,
tredje, ange namnet på den överordnade tabell till vilken de utländska nyckelreferenser och en lista med kommaseparerade kolumner som har en länk med kolumnen i underordnade tabellen.
SQL Server FOREIGN KEY constraint example
För det första, sätt in några rader i tabellenvendor_groups
:
För det andra, sätt in en ny leverantör med en leverantörsgrupp i tabellen vendors
:
Code language: SQL (Structured Query Language) (sql)
uttalandet fungerade som förväntat.,
tredje, försök att infoga en ny leverantör vars leverantörsgrupp inte finns i tabellenvendor_groups
:
Code language: SQL (Structured Query Language) (sql)
SQL Server utfärdade följande fel:
i det här exemplet, på grund av begränsningenFOREIGN KEY
, avvisade SQL Server insatsen och utfärdade ett fel.
Referensåtgärder
den utländska nyckelbegränsningen säkerställer referensintegritet. Det betyder att du bara kan infoga en rad i barntabellen om det finns en motsvarande rad i modertabellen.,
med begränsningen för främmande nyckel kan du definiera referensåtgärderna när raden i modertabellen uppdateras eller raderas enligt följande:
ON UPDATE
ochON DELETE
ange vilken åtgärd som ska utföras när en rad i modertabellen uppdateras och raderas., Följande är tillåtna åtgärder : NO ACTION
, CASCADE
, SET NULL
och SET DEFAULT
ta bort åtgärder av rader i den överordnade tabellen
om du tar bort en eller flera rader i den överordnade tabellen kan du ange en av följande åtgärder:
-
ON DELETE NO ACTION
: SQL Server väcker ett fel och rullar tillbaka delete-åtgärden på raden i modertabellen. -
ON DELETE CASCADE
: SQL Server raderar raderna i den underordnade tabellen som motsvarar raden borttagen från den överordnade tabellen., -
ON DELETE SET NULL
: SQL Server anger raderna i underordnade tabellen tillNULL
om motsvarande rader i överordnade tabellen tas bort. För att utföra denna åtgärd måste de utländska nyckelkolumnerna vara ogiltiga. -
ON DELETE SET DEFAULT
SQL Server anger raderna i underordnade tabellen till standardvärdena om motsvarande rader i överordnade tabellen tas bort. För att utföra denna åtgärd måste de utländska nyckelkolumnerna ha standarddefinitioner. Observera att en nullable kolumn har ett standardvärde förNULL
om inget standardvärde anges.,
som standard gäller SQL ServerON DELETE NO ACTION
om du inte uttryckligen anger någon åtgärd.
uppdatera åtgärd av rader i den överordnade tabellen
om du uppdaterar en eller flera rader i den överordnade tabellen kan du ställa in en av följande åtgärder:
-
ON UPDATE NO ACTION
: SQL Server väcker ett fel och rullar tillbaka uppdateringsåtgärden på raden i den överordnade tabellen. -
ON UPDATE CASCADE
: SQL Server uppdaterar motsvarande rader i underordnade tabellen när raderna i överordnade tabellen uppdateras., -
ON UPDATE SET NULL
: SQL Server anger raderna i underordnade tabellen tillNULL
när motsvarande rad i överordnade tabellen uppdateras. Observera att de utländska nyckelkolumnerna måste vara ogiltiga för att denna åtgärd ska kunna utföras. -
ON UPDATE SET DEFAULT
: SQL Server ställer in standardvärdena för raderna i underordnade tabellen som har motsvarande rader i överordnade tabellen uppdaterad.