Articles

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ör NULL 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.