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 nyckelordet
CONSTRAINT
. 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 nyckelorden
FOREIGN 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
ochON 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
Lämna ett svar