sammanfattning: i den här handledningen kommer du att lära dig om PostgreSQL foreign key och hur du lägger till utländska nycklar i tabeller med hjälp av utländska nyckelbegränsningar.

introduktion till PostgreSQL Foreign Key Constraint

en utländsk nyckel är en kolumn eller en grupp kolumner i en tabell som refererar till primärnyckeln i en annan tabell.

tabellen som innehåller den främmande nyckeln kallas referenstabellen eller underordnade tabellen. Och tabellen som refereras av den utländska nyckeln kallas den refererade tabellen eller modertabellen.,

en tabell kan ha flera främmande nycklar beroende på dess relationer med andra tabeller.

i PostgreSQL definierar du en utländsk nyckel med begränsningen för utländsk nyckel. Den utländska nyckelbegränsningen bidrar till att upprätthålla dataens referensintegritet mellan barn-och föräldratabellerna.

en begränsning av en främmande nyckel indikerar att värden i en kolumn eller en grupp kolumner i underordnade tabellen motsvarar värdena i en kolumn eller en grupp kolumner i överordnade tabellen.,

PostgreSQL foreign key constraint syntax

följande illustrerar en syntax för utländsk nyckelbegränsning:

i denna syntax:

  • ange först namnet på den utländska nyckelbegränsningen efter nyckelordetCONSTRAINT. KlausulenCONSTRAINT är valfri. Om du utelämnar det kommer PostgreSQL att tilldela ett automatiskt genererat namn.
  • för det andra anger du en eller flera främmande nyckelkolumner inom parentes efter nyckelordenFOREIGN KEY.,
  • tredje, ange den överordnade tabellen och de överordnade nyckelkolumnerna som refereras av de utländska nyckelkolumnerna i – klausulen.
  • ange slutligen åtgärderna ta bort och uppdatera i klausulerna ON DELETE och ON UPDATE.

åtgärderna ta bort och uppdatera avgör beteenden när primärnyckeln i den överordnade tabellen tas bort och uppdateras. Eftersom den primära nyckeln sällan uppdateras används inteON UPDATE action I praktiken. Vi fokuserar på åtgärdenON DELETE.,

PostgreSQL stöder följande åtgärder:

  • SET NULL
  • SET DEFAULT
  • RESTRICT
  • ingen åtgärd
  • CASCADE

PostgreSQL foreign key constraint examples

följande uttalanden skapar customers och contacts tabeller:

i det här exemplet är tabellen customers den överordnade tabellen och tabellen contacts är den underordnade tabellen.

varje kund har noll eller många kontakter och varje kontakt tillhör noll eller en kund.,

customer_id – kolumnen i tabellencontacts är den främmande nyckelkolumnen som refererar till den primära nyckelkolumnen med samma namn i tabellencustomers.

följande begränsning av utländsk nyckel fk_customer I tabellen contacts definierar tabellen customer_id som utländsk nyckel:

eftersom begränsningen av utländsk nyckel inte har ON DELETE och ON UPDATE iv id=”åtgärd, de standard till NO ACTION.,

ingen åtgärd

följande infogar data i tabellernacustomers ochcontacts:

följande uttalande tar bort kund-id 1 från tabellencustomers:

Code language: SQL (Structured Query Language) (sql)

På grund avON DELETE NO ACTION utfärdar PostgreSQL ett begränsningsbrott eftersom referensraderna för kund-id 1 fortfarande finns i tabellencontacts:

åtgärdenRESTRICT liknar åtgärdenNO ACTION., Skillnaden uppstår bara när du definierar begränsningen för den utländska nyckeln som DEFERRABLE med ett INITIALLY DEFERRED eller INITIALLY IMMEDIATE – läge. Vi kommer att diskutera mer om detta i den efterföljande handledningen.

Ställ NULL

SET NULL ställer automatisktNULL till de utländska nyckelkolumnerna i referensraderna i underordnade tabellen när de refererade raderna i överordnade tabellen raderas.,

följande satser släpper provtabellerna och återskapar dem med den utländska nyckeln som använder SET NULL-åtgärden i ON DELETE – klausulen:

följande satser infogar data i customers och contacts – tabellerna:

för att se hur customers och contacts div id=”F471fcdba6″>fungerar, låt oss ta bort kunden med id 1 från tabellen customers:

Code language: SQL (Structured Query Language) (sql)

på grund av åtgärdenON DELETE SET NULL anges referensraderna i tabellen contacts till null., Följande uttalande visar data i tabellen contacts:

som tydligt framgår av utdata, de rader som har customer_id 1 nu har customer_id ställer in NULL

Cascade

ON DELETE CASCADE raderar automatiskt alla referensrader i underordnade tabellen när de refererade raderna i överordnade tabellen raderas., I praktiken ärON DELETE CASCADE det vanligaste alternativet.

följande uttalanden återskapar provtabellerna.,iv> ändringar i CASCADE:

följande uttalande tar bort kund-id 1:

på grund av åtgärden ON DELETE CASCADE raderas alla referensrader i tabellen contacts automatiskt:

ON DELETE CASCADE. 0295a3229b”>

ange standard

ON DELETE SET DEFAULT anger standardvärdet till kolumnen för den främmande nyckeln i referensraderna i underordnade tabellen när de refererade raderna från modertabellen raderas.,nt till en befintlig tabell

om du vill lägga till en utländsk nyckelbegränsning i den befintliga tabellen använder du följande form av Alter TABLE-satsen:

När du lägger till en utländsk nyckelbegränsning med ON DELETE CASCADE – alternativet i en befintlig tabell måste du följa dessa steg:

först, släpp befintliga utländska nyckelbegränsningar:

Code language: SQL (Structured Query Language) (sql)

lägg först till en new foreign key constraint with ON DELETE CASCADE action:

i den här handledningen har du lärt dig om PostgreSQL foreign keys och hur du använder foreign key constraint för att skapa utländska nycklar för en tabell.,

  • var den här handledningen till hjälp ?
  • YesNo