In SQLite, puoi utilizzare un'istruzione PRAGMA per restituire un elenco di chiavi esterne per una determinata tabella.
Sintassi
La sintassi è questa:
PRAGMA foreign_key_list(table-name);
Dove table-name
è il nome della tabella da cui vuoi inserire l'elenco delle chiavi esterne.
Esempio
Innanzitutto, creiamo una tabella con un vincolo di chiave esterna.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
In questo caso ho creato due tabelle. Gli Animali domestici tabella ha un vincolo di chiave esterna che fa riferimento ai Tipi tabella.
Ora posso usare il PRAGMA foreign_key_list(table-name)
istruzione per recuperare quella chiave esterna.
.mode line
PRAGMA foreign_key_list(Pets);
Risultato (usando l'output verticale):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Questa istruzione PRAGMA restituisce otto colonne, quindi ho usato .mode line
per produrre i risultati verticalmente. In questo modo non devi scorrere lateralmente.
In questo caso c'è solo un vincolo di chiave esterna sul tavolo. Se ce ne fossero di più, sarebbero elencati nei risultati.
Nessuna chiave esterna
Ecco cosa succede se eseguo la stessa istruzione PRAGMA su una tabella senza chiavi esterne.
PRAGMA foreign_key_list(Types);
Risultato (usando l'output verticale):
(Questo è vuoto perché non ci sono chiavi esterne.)
Restituisci le istruzioni CREATE TABLE
L'istruzione seguente può essere utilizzata per restituire il codice SQL effettivo utilizzato per creare ogni tabella con una chiave esterna.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Risultato:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
In questo caso il database contiene solo una chiave esterna (quella che ho creato per questo esempio). Se ce ne fossero di più, il CREATE TABLE
tutte le affermazioni sarebbero elencate in questi risultati.