V SQLite můžete pomocí příkazu PRAGMA vrátit seznam cizích klíčů pro danou tabulku.
Syntaxe
Syntaxe vypadá takto:
PRAGMA foreign_key_list(table-name);
Kde table-name
je název tabulky, ze které chcete mít seznam cizích klíčů.
Příklad
Nejprve vytvořte tabulku s omezením cizího klíče.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
V tomto případě jsem vytvořil dvě tabulky. Zvířata tabulka má omezení cizího klíče, které odkazuje na Typy tabulka.
Nyní mohu použít PRAGMA foreign_key_list(table-name)
příkaz k načtení tohoto cizího klíče.
.mode line
PRAGMA foreign_key_list(Pets);
Výsledek (při použití vertikálního výstupu):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Tento příkaz PRAGMA vrací osm sloupců, takže jsem použil .mode line
k výstupu výsledků vertikálně. To proto, abyste se nemuseli posouvat do stran.
V tomto případě je v tabulce pouze jedno omezení cizího klíče. Pokud by jich bylo více, byli by uvedeni ve výsledcích.
Žádné cizí klíče
Zde je to, co se stane, když spustím stejný příkaz PRAGMA na tabulce bez cizích klíčů.
PRAGMA foreign_key_list(Types);
Výsledek (při použití vertikálního výstupu):
(Toto je prázdné, protože neexistují žádné cizí klíče.)
Vraťte příkazy CREATE TABLE
Následující příkaz lze použít k vrácení skutečného kódu SQL použitého k vytvoření každé tabulky s cizím klíčem.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Výsledek:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
V tomto případě databáze obsahuje pouze jeden cizí klíč (ten, který jsem vytvořil pro tento příklad). Pokud jich bylo více, CREATE TABLE
v těchto výsledcích by byly všechny uvedeny.