Riepilogo: in questo tutorial, imparerai a conoscere PostgreSQL foreign key e come aggiungere chiavi esterne alle tabelle utilizzando i vincoli delle chiavi esterne.

Introduzione al vincolo di chiave esterna di PostgreSQL

Una chiave esterna è una colonna o un gruppo di colonne in una tabella che fanno riferimento alla chiave primaria di un’altra tabella.

La tabella che contiene la chiave esterna è chiamata tabella di riferimento o tabella figlio. E la tabella a cui fa riferimento la chiave esterna è chiamata tabella di riferimento o tabella padre.,

Una tabella può avere più chiavi esterne a seconda delle sue relazioni con altre tabelle.

In PostgreSQL, si definisce una chiave esterna utilizzando il vincolo della chiave esterna. Il vincolo della chiave esterna aiuta a mantenere l’integrità referenziale dei dati tra le tabelle figlio e padre.

Un vincolo di chiave esterna indica che i valori in una colonna o in un gruppo di colonne nella tabella figlio sono uguali ai valori in una colonna o in un gruppo di colonne della tabella padre.,

PostgreSQL foreign key constraint syntax

Quanto segue illustra una sintassi del vincolo di chiave esterna:

In questa sintassi:

  • Per prima cosa, specificare il nome del vincolo di chiave esterna dopo la parola chiaveCONSTRAINT. La clausolaCONSTRAINT è facoltativa. Se lo si omette, PostgreSQL assegnerà un nome generato automaticamente.
  • In secondo luogo, specificare una o più colonne di chiavi esterne tra parentesi dopo le parole chiaveFOREIGN KEY.,
  • In terzo luogo, specificare la tabella padre e le colonne della chiave padre a cui fanno riferimento le colonne della chiave esterna nella clausola.
  • Infine, specificare le azioni di eliminazione e aggiornamento nelle clausole ON DELETE eON UPDATE.

Le azioni Elimina e aggiorna determinano i comportamenti quando la chiave primaria nella tabella padre viene eliminata e aggiornata. Poiché la chiave primaria viene raramente aggiornata, il ON UPDATE action non viene spesso utilizzato nella pratica. Ci concentreremo sull’azioneON DELETE.,

PostgreSQL supporta le seguenti azioni:

  • SET NULL
  • IMPOSTARE di DEFAULT
  • IDENTIFICAZIONE
  • NESSUNA AZIONE
  • CASCATA

PostgreSQL vincolo di chiave esterna esempi

Le seguenti dichiarazioni creare il customers e contacts tabelle:

In questo esempio, il customers tabella è la tabella padre e il contacts tabella è la tabella figlio.

Ogni cliente ha zero o più contatti e ogni contatto appartiene a zero o un cliente.,

La colonna customer_id nella tabella contacts è la colonna della chiave esterna che fa riferimento alla colonna della chiave primaria con lo stesso nome nella tabella customers.

Il seguente vincolo foreign key fk_customer nel contacts tabella definisce il customer_id come foreign key:

Perché il vincolo di chiave esterna non hanno il ON DELETE e ON UPDATE azione, che di default NO ACTION.,

NESSUNA AZIONE

I seguenti inserisce i dati nel customers e contacts tabelle:

La seguente dichiarazione elimina l’id cliente 1 customers tabella:

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

a Causa del ON DELETE NO ACTION PostgreSQL problemi di violazione di un vincolo, perché il riferimento righe l’id del cliente 1 esistono ancora nel contacts tabella:

RESTRICT azione è simile a NO ACTION., La differenza si verifica solo quando si definisce il vincolo della chiave esterna comeDEFERRABLE con una modalitàINITIALLY DEFERRED oINITIALLY IMMEDIATE. Discuteremo di più su questo nel tutorial successivo.

IMPOSTA NULL

SET NULLimposta automaticamente NULL alle colonne della chiave esterna nelle righe di riferimento della tabella figlio quando le righe di riferimento nella tabella padre vengono eliminate.,

Le seguenti dichiarazioni rilasciare le tabelle di esempio e di ricrearli con la chiave esterna che utilizza il tag SET NULL azione ON DELETE clausola:

Le seguenti dichiarazioni inserire i dati nel customers e contacts tabelle:

Per vedere come il SET NULL funziona, prova ad eliminare il cliente con id 1 customers tabella:

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

a Causa del ON DELETE SET NULL azione, il riferimento righe nel contacts tabella impostato su NULL., Il seguente prospetto riporta i dati nella contacts tabella:

Come si può vedere chiaramente dall’uscita, le righe che hanno il customer_id 1 ora il customer_id imposta NULL

CASCATA

ON DELETE CASCADE elimina automaticamente tutti i riferimenti righe della tabella figlio quando il riferimento righe della tabella padre vengono eliminati., In pratica, ON DELETE CASCADE è l’opzione più comunemente utilizzata.

Le seguenti istruzioni ricreano le tabelle di esempio.,iv> modifiche CASCADE:

La seguente dichiarazione elimina l’id cliente 1:

a Causa del ON DELETE CASCADE azione, tutti i riferimenti righe nel contacts tabella vengono cancellati automaticamente:

IMPOSTARE di DEFAULT

ON DELETE SET DEFAULT imposta il valore predefinito per la colonna di chiave esterna di riferimento righe della tabella figlio quando il riferimento righe della tabella padre vengono eliminati.,nt a una tabella esistente

Per aggiungere un vincolo di chiave esterna per la tabella esistente, è possibile utilizzare il seguente modulo dell’istruzione ALTER TABLE:

Quando si aggiunge un vincolo di chiave esterna con ON DELETE CASCADE opzione a una tabella esistente, è necessario attenersi alla seguente procedura:

in Primo luogo, goccia esistenti vincoli foreign key:

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

in Primo luogo, aggiungere un nuovo vincolo foreign key con ON DELETE CASCADE azione:

In questo tutorial, hai imparato su PostgreSQL, chiavi esterne e come utilizzare il vincolo di chiave esterna per creare chiavi esterne per una tabella.,

  • Questo tutorial è stato utile ?