В SQLite можете да използвате оператор PRAGMA, за да върнете списък с външни ключове за дадена таблица.
Синтаксис
Синтаксисът е така:
PRAGMA foreign_key_list(table-name);
Където table-name
е името на таблицата, от която искате списъка с външни ключове.
Пример
Първо, нека създадем таблица с ограничение за външен ключ.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
В този случай създадох две таблици. Домашни любимци таблицата има ограничение за външен ключ, което препраща към Типове таблица.
Сега мога да използвам PRAGMA foreign_key_list(table-name)
изявление за извличане на този външен ключ.
.mode line
PRAGMA foreign_key_list(Pets);
Резултат (с помощта на вертикален изход):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Този оператор PRAGMA връща осем колони, така че използвах .mode line
за извеждане на резултатите вертикално. Това е така, за да не се налага да превъртате настрани.
В този случай има само едно ограничение за външен ключ на таблицата. Ако имаше повече, те щяха да бъдат изброени в резултатите.
Без чужди ключове
Ето какво се случва, ако изпълня същия оператор PRAGMA на таблица без никакви външни ключове.
PRAGMA foreign_key_list(Types);
Резултат (с помощта на вертикален изход):
(Това е празно, защото няма външни ключове.)
Върнете изразите CREATE TABLE
Следният израз може да се използва за връщане на действителния SQL код, използван за създаване на всяка таблица с външен ключ.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Резултат:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
В този случай базата данни съдържа само един външен ключ (този, който създадох за този пример). Ако имаше повече, CREATE TABLE
всички изявления ще бъдат изброени в тези резултати.