In SQLite kun je een PRAGMA-statement gebruiken om een lijst met externe sleutels voor een bepaalde tabel te retourneren.
Syntaxis
De syntaxis gaat als volgt:
PRAGMA foreign_key_list(table-name);
Waar table-name
is de naam van de tabel waarvan u de lijst met externe sleutels wilt hebben.
Voorbeeld
Laten we eerst een tabel maken met een externe sleutelbeperking.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
In dit geval heb ik twee tabellen gemaakt. De Huisdieren tabel heeft een externe sleutelbeperking die verwijst naar de Typen tafel.
Nu kan ik de PRAGMA foreign_key_list(table-name)
. gebruiken statement om die externe sleutel op te halen.
.mode line
PRAGMA foreign_key_list(Pets);
Resultaat (met verticale uitvoer):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Deze PRAGMA-instructie retourneert acht kolommen, dus ik gebruikte .mode line
om de resultaten verticaal uit te voeren. Zo hoef je niet zijwaarts te scrollen.
In dit geval is er slechts één externe sleutelbeperking op tafel. Als er meer waren, zouden ze in de resultaten worden vermeld.
Geen externe sleutels
Dit is wat er gebeurt als ik hetzelfde PRAGMA-statement uitvoer op een tafel zonder externe sleutels.
PRAGMA foreign_key_list(Types);
Resultaat (met verticale uitvoer):
(Dit is blanco omdat er geen externe sleutels zijn.)
Retourneer de CREATE TABLE-verklaringen
De volgende instructie kan worden gebruikt om de daadwerkelijke SQL-code te retourneren die is gebruikt om elke tabel met een externe sleutel te maken.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Resultaat:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
In dit geval bevat de database slechts één externe sleutel (degene die ik voor dit voorbeeld heb gemaakt). Als er meer waren, de CREATE TABLE
uitspraken zouden allemaal in deze resultaten worden vermeld.