Introduktion till Foreign Key i SQL

Foreign Key är en begränsning i SQL. Det används för att relatera de två tabellerna. En utländsk nyckel i en tabell pekar på en primär nyckel i en annan tabell. En utländsk nyckel kan användas för att se till att raden i en tabell har motsvarande rad / rader i en annan tabell. Den refererade tabellen kallas överordnade tabellen och tabellen med den utländska nyckeln kallas underordnade tabellen. Denna förhållande mellan barn och barn verkställer regeln som kallas Referensiell integritet. Referensintegritet är en egenskap hos data som anger att alla referenser är giltiga.

Så om du har 1-till-många eller många-till-många-relationer i databasen kommer utländska nycklar att vara mycket användbara. Det fungerar som en korsreferens mellan två tabeller (överordnade tabeller och underordnade tabeller) eftersom den refererar till den primära nyckeln i en annan tabell. Så det skapar en länk mellan parent_table och child_table.

Syntax

Att skapa en ny tabell med en utländsk nyckel kräver CREATE TABLE-behörighet i databasen

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table är tabellnamnet som vi skapar
  • column_1, column_2- kolumnerna som ska läggas till i tabellen.
  • F_key- Detta är en främmande nyckelbegränsning.
  • child_column1, child_column2… child_column_n- Det är namnet på child_Table-kolumner för att referera till den primära nyckeln i överordnade tabeller.
  • Parent_Table- Detta är namnet på parent_table. Den primära nyckeln till parent_table hänvisas till under child_table
  • PÅ RADERA - Denna parameter gör åtgärder för barndata efter borttagandet av förälderdata. SET NULL, NO ACTION, CASCADE, SET DEFAULT är några av värdena för denna parameter.
  • ON UPDATE- Detta är en valfri parameter som vidtar åtgärder för barndata efter uppdatering av förälderdata. SET NULL, NO ACTION, CASCADE, SET DEFAULT är några av värdena för denna parameter.
  • CASCADE- Vi kan använda detta tillsammans med ON DELETE och ON UPDATE. Efter borttagande eller uppdatering av förälderdata kommer barndata att raderas eller uppdateras.

Att skapa en utländsk nyckel i en befintlig tabell kräver ALTER-behörighet på bordet.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

regler

  1. Utländska nycklar gäller inte tillfälliga tabeller.
  2. Främmande nyckelbegränsningar behöver inte kopplas endast till den primära nyckeln i en annan tabell, den kan också kopplas till UNIKT begränsningen i en annan tabell.
  3. Utländska nyckelbegränsningar kan hänvisa till en annan kolumn i samma tabell. Detta kallas en självreferens.
  4. Främmande nyckelbegränsningar kan hänvisa till tabellerna i samma databas.
  5. Vi kan också infoga NULL-värden i underordnade tabeller.
  6. När vi infogar annat än NULL-värdet i den främmande nyckelbegränsningen måste värdet existera i meddelandet om kränkning av annan referens inträffade.
  7. Värdet på förälderns unika nycklar kan inte ändras om uppdateringsregeln är RESTRICT och det finns en eller flera beroende rader. Men om uppdateringsregeln är INGEN ÅTGÄRD, kan unika nycklar för föräldrar uppdateras så länge varje barn har en föräldernyckel när uppdateringsförklaringen slutförs.

exempel

Säg att vi har två bord Kunder och beställningar. Kundtabellen har alla kundrelaterade data och Order-tabellen med kundorderrelaterade data.

kunder

Cust_idPrimärnyckel
CUST_NAME
Plats

Order

ORDER_IDPrimärnyckel
Orderdatum
Antal
Cust_idFrämmande nyckel
Totala summan

I exemplet ovan är Cust_id-kolumnen i ORDERS-tabellen en främmande nyckel som pekar på Cust_id-kolumnen i CUSTOMERS-tabellen.

Låt oss anta att dessa tabeller har följande värden

kunder

1001AlexUSA
1002CareyUSA
1003SidStorbritannien
1004TomAUS
1005KapilIND

Order

7820-10-2018510021200
792017/12/1041001800
8020-11-201621005369
812016/09/1051002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
852016/02/0121002260

För cust_id 1001 finns det tre beställningar som finns i ordertabellen.

För cust_id 1003 finns ingen beställning.

Så om vi har särskilda data (Say id 1003) i överordnade tabeller är det inte nödvändigt att ha den informationen i underordnade tabellerna men tvärtom är inte sant.

Vi kan inte ha någon information i underordnade tabellen (beställningstabell) som inte finns i överordnade tabeller (kunder.)

Vi kan till exempel inte sätta in en ny post som säger för cust_id 1006 i tabellen Order eftersom cust_id 1006 inte finns i kundtabellen.

Så nedan är exemplen som kränker referensintegriteten i detta förhållande:

  1. Infoga en rad i ORDERS-tabellen där Cust_ID inte visas i Cust_ID-kolumnen i CUSTOMERS-tabellen.
  2. Radera en rad från CUSTOMERS-tabellen där Cust_ID för raden som ska raderas fortfarande finns i Cust_ID-kolumnen i ORDERS-tabellen.

När en viss post tas bort från huvudtabellen finns det två sätt att bibehålla integriteten för data i underordnade tabeller. När två tabeller är anslutna med utländsk nyckel och vissa data i huvudtabellen raderas, för vilka posten finns i barntabellen, så har vi en mekanism för att spara dataens integritet i barntabellen

  • På Radera kaskad : Detta tar bort posten från underordnatabellen om det värdet på den utländska nyckeln raderas från huvudtabellen.
  • På Radera NULL: Detta kommer att ställa in alla värden i den posten i barntabellen som NULL, för vilken värdet på den utländska nyckeln raderas från huvudtabellen.

Slutsats - Utländsk nyckel i SQL

Så det är lämpligt att använda Foreign Key i databasen som har en till en eller en till många relationer. Den största fördelen med att använda utländska nyckelbegränsningar är att det förbättrar prestanda. Utvecklare kan enkelt identifiera strukturen i databasen. Vi kan också undersöka hur frågan kommer att hämta data.

Rekommenderade artiklar

Detta är en guide till Foreign Key i SQL. Här diskuterar vi regler och exempel på Foreign Key i SQL med Syntax. Du kan också titta på följande artiklar för att lära dig mer -

  1. SQL Views
  2. Typer av sammanfogningar i SQL Server
  3. Vad är PL / SQL?
  4. SQL Server-begränsningar
  5. Topp 6 typer av sammanfogningar i MySQL med exempel