I SQLite kan du bruge en PRAGMA-sætning til at returnere en liste over fremmednøgler for en given tabel.
Syntaks
Syntaksen ser sådan ud:
PRAGMA foreign_key_list(table-name);
Hvor table-name
er navnet på den tabel, du vil have listen over fremmednøgler fra.
Eksempel
Lad os først oprette en tabel med en fremmednøglebegrænsning.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
I dette tilfælde oprettede jeg to tabeller. Kæledyr tabellen har en fremmednøglebegrænsning, der refererer til Typerne tabel.
Nu kan jeg bruge PRAGMA foreign_key_list(table-name)
sætning for at hente den fremmednøgle.
.mode line
PRAGMA foreign_key_list(Pets);
Resultat (ved hjælp af lodret output):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Denne PRAGMA-sætning returnerer otte kolonner, så jeg brugte .mode line
for at udskrive resultaterne lodret. Dette er, så du ikke behøver at rulle sidelæns.
I dette tilfælde er der kun én fremmednøglebegrænsning på bordet. Hvis der var flere, ville de være opført i resultaterne.
Ingen fremmednøgler
Her er, hvad der sker, hvis jeg kører den samme PRAGMA-sætning på en tabel uden nogen fremmednøgler.
PRAGMA foreign_key_list(Types);
Resultat (ved hjælp af lodret output):
(Dette er tomt, fordi der ikke er nogen fremmednøgler.)
Returner CREATE TABLE-erklæringerne
Følgende sætning kan bruges til at returnere den faktiske SQL-kode, der blev brugt til at oprette hver tabel med en fremmednøgle.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Resultat:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
I dette tilfælde indeholder databasen kun én fremmednøgle (den jeg oprettede til dette eksempel). Hvis der var flere, CREATE TABLE
udsagn vil alle blive opført i disse resultater.