I SQLite kan du använda en PRAGMA-sats för att returnera en lista med främmande nycklar för en given tabell.
Syntax
Syntaxen ser ut så här:
PRAGMA foreign_key_list(table-name);
Där table-name
är namnet på tabellen du vill ha listan över främmande nycklar från.
Exempel
Låt oss först skapa en tabell med en främmande nyckel-begrä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 det här fallet skapade jag två tabeller. Husdjur tabellen har en främmande nyckel-begränsning som refererar till Typer bord.
Nu kan jag använda PRAGMA foreign_key_list(table-name)
uttalande för att hämta den främmande nyckeln.
.mode line
PRAGMA foreign_key_list(Pets);
Resultat (med vertikal utdata):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Denna PRAGMA-sats returnerar åtta kolumner, så jag använde .mode line
för att visa resultaten vertikalt. Detta för att du inte behöver rulla i sidled.
I det här fallet finns det bara en begränsning av främmande nyckel på bordet. Om det fanns fler skulle de listas i resultaten.
Inga främmande nycklar
Det här är vad som händer om jag kör samma PRAGMA-sats på en tabell utan några främmande nycklar.
PRAGMA foreign_key_list(Types);
Resultat (med vertikal utdata):
(Detta är tomt eftersom det inte finns några främmande nycklar.)
Tillbaka CREATE TABLE-satserna
Följande sats kan användas för att returnera den faktiska SQL-koden som används för att skapa varje tabell med en främmande nyckel.
.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 det här fallet innehåller databasen bara en främmande nyckel (den jag skapade för detta exempel). Om det fanns fler, CREATE TABLE
påståenden skulle alla listas i dessa resultat.