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 chiave
CONSTRAINT
. 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 chiave
FOREIGN 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 NULL
imposta 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 ?
- Sì
Lascia un commento