sql >> データベース >  >> RDS >> SQLite

SQLiteで外部キーのリストを返す

    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 ステートメントはすべてこれらの結果にリストされます。


    1. PostgreSQLでのデータウェアハウスの実行

    2. TSQL-データベース内のすべてのテーブルに列を追加する[カーソルの例]

    3. pg_configパスを見つける方法

    4. SQLServerのAlwaysOn可用性グループのトラブルシューティング