In SQLite, i vincoli della chiave esterna non vengono applicati a meno che non sia stato abilitato il supporto della chiave esterna.
L'abilitazione delle chiavi esterne comporta quanto segue:
- Abilita le chiavi esterne durante la compilazione di SQLite.
- Abilita chiavi esterne in fase di esecuzione.
Abilita chiavi esterne durante la compilazione di SQLite
Quando si tratta di compilare SQLite, non si tratta tanto di abilitare chiavi esterne:è più una questione di non disabilitare loro.
Abilitare le chiavi esterne durante la compilazione di SQLite significa semplicemente che non usi SQLITE_OMIT_FOREIGN_KEY
e SQLITE_OMIT_TRIGGER
durante la compilazione.
Se SQLITE_OMIT_TRIGGER
è definito ma SQLITE_OMIT_FOREIGN_KEY
non lo è, le definizioni di chiave esterna vengono analizzate e possono essere interrogate utilizzando PRAGMA foreign_key_list
, ma i vincoli di chiave esterna non vengono applicati. Il PRAGMA foreign_keys
il comando non è operativo in questa configurazione.
Se OMIT_FOREIGN_KEY
è definita, le definizioni di chiave esterna non possono nemmeno essere analizzate (il tentativo di specificare una definizione di chiave esterna è un errore di sintassi).
Abilita chiavi esterne in fase di esecuzione
Anche quando la libreria è stata compilata con i vincoli di chiave esterna abilitati, è comunque necessario abilitare il supporto della chiave esterna in fase di esecuzione.
Puoi farlo con il seguente codice:
PRAGMA foreign_keys = ON;
Come con la maggior parte dei PRAGMA
istruzioni, potresti in alternativa sostituire ON
con TRUE
, YES
o 1
.
Una volta eseguito, le tue chiavi esterne verranno applicate.
Tieni presente che questa impostazione non è richiesta per la creazione chiavi esterne, ma è necessario per l'imposizione chiavi esterne.
Altre connessioni
Si noti che ciò abilita solo i vincoli di chiave esterna per la connessione al database corrente.
Se apri una nuova connessione, dovrai eseguire nuovamente l'istruzione se desideri che le chiavi esterne vengano applicate in quella connessione.
Verifica il supporto della chiave esterna per la connessione corrente
Puoi anche verificare se le chiavi esterne sono già state abilitate per la tua connessione corrente eseguendo il codice seguente.
PRAGMA foreign_keys;
Risultato:
1
Nel mio caso, ho già abilitato le chiavi esterne per questa connessione, quindi il risultato è 1. Se le chiavi esterne fossero disabilitate, il risultato sarebbe 0.
Ecco un esempio di disabilitazione, controllo del valore, quindi abilitazione e ricontrollo del valore.
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;
Risultato:
sqlite> PRAGMA foreign_keys = FALSE; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 0 sqlite> PRAGMA foreign_keys = YES; sqlite> PRAGMA foreign_keys; foreign_keys ------------ 1