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)
);
この場合、2つのテーブルを作成しました。 ペット テーブルには、タイプを参照する外部キー制約があります テーブル。
これで、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ステートメントは8列を返すため、.mode line
を使用しました 結果を垂直方向に出力します。これは、横にスクロールする必要がないようにするためです。
この場合、テーブルには1つの外部キー制約しかありません。それ以上ある場合は、結果に表示されます。
外部キーなし
外部キーを使用せずにテーブルで同じPRAGMAステートメントを実行すると、次のようになります。
PRAGMA foreign_key_list(Types);
結果(垂直出力を使用):
(外部キーがないため、これは空白です。)
CREATETABLEステートメントを返す
次のステートメントを使用して、外部キーを使用して各テーブルを作成するために使用される実際の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) )
この場合、データベースには1つの外部キー(この例で作成したもの)のみが含まれています。それ以上ある場合は、CREATE TABLE
ステートメントはすべてこれらの結果にリストされます。