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

SQLiteで外部キーサポートを有効にする方法

    SQLiteでは、外部キーのサポートが有効になっていない限り、外部キーの制約は適用されません。

    外部キーを有効にするには、次のことが必要です。

    1. SQLiteのコンパイル時に外部キーを有効にします。
    2. 実行時に外部キーを有効にします。

    SQLiteのコンパイル時に外部キーを有効にする

    SQLiteのコンパイルに関しては、有効化の問題ではありません。 外部キー–それは無効にしないの問題です それら。

    SQLiteのコンパイル時に外部キーを有効にするということは、単にSQLITE_OMIT_FOREIGN_KEYを使用しないことを意味します。 およびSQLITE_OMIT_TRIGGER コンパイルするとき。

    SQLITE_OMIT_TRIGGERの場合 定義されていますが、SQLITE_OMIT_FOREIGN_KEY そうでない場合、外部キー定義が解析され、PRAGMA foreign_key_listを使用して照会できます。 、ただし、外部キー制約は適用されません。 PRAGMA foreign_keys この構成では、コマンドは何も実行されません。

    OMIT_FOREIGN_KEYの場合 が定義されている場合、外部キー定義を解析することもできません(外部キー定義を指定しようとすると、構文エラーになります)。

    実行時に外部キーを有効にする

    ライブラリが外部キー制約を有効にしてコンパイルされている場合でも、実行時に外部キーのサポートを有効にする必要があります。

    これは、次のコードで実行できます。

    PRAGMA foreign_keys = ON;

    ほとんどのPRAGMAと同様に ステートメントの場合は、代わりにONを置き換えることもできます TRUEを使用 、YES 、または1

    これを実行すると、外部キーが適用されます。

    この設定は作成には必要ないことに注意してください 外部キー。ただし、強制には必須です。 外部キー。

    その他の接続

    これにより、現在のデータベース接続の外部キー制約のみが有効になることに注意してください。

    新しい接続を開く場合、その接続で外部キーを適用する場合は、そのステートメントを再度実行する必要があります。

    現在の接続の外部キーサポートを確認する

    次のコードを実行して、現在の接続で外部キーがすでに有効になっているかどうかを確認することもできます。

    PRAGMA foreign_keys;

    結果:

    1

    私の場合、この接続に対して外部キーをすでに有効にしているため、結果は1になります。外部キーが無効になっている場合、結果は0になります。

    無効にして値を確認してから、有効にして値を再確認する例を次に示します。

    PRAGMA foreign_keys = FALSE;
    PRAGMA foreign_keys;
    PRAGMA foreign_keys = YES;
    PRAGMA foreign_keys;

    結果:

    sqlite> PRAGMA foreign_keys = FALSE;
    sqlite> PRAGMA foreign_keys;
    foreign_keys
    ------------
    0           
    sqlite> PRAGMA foreign_keys = YES;
    sqlite> PRAGMA foreign_keys;
    foreign_keys
    ------------
    1           

    1. SQLiteは頻繁なSELECTクエリでデータベースファイル(コード14)を開くことができません

    2. MySQLデータベースのすべてのテーブルのフィールドでテキストを検索する

    3. SQL Server(T-SQL)でパーティションを切り替える

    4. SQLServerデータベース内のすべてのテーブル値関数を一覧表示する2つの方法