ホームページ >データベース >mysql チュートリアル >SQLite3 の外部キー制約は、「PRAGMA foreign_keys = ON;」が使用されるまで INSERT に失敗するように見えるのはなぜですか?

SQLite3 の外部キー制約は、「PRAGMA foreign_keys = ON;」が使用されるまで INSERT に失敗するように見えるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-04 18:49:40967ブラウズ

Why Do SQLite3 Foreign Key Constraints Seem to Fail INSERTs Until `PRAGMA foreign_keys = ON;` is Used?

SQLite3 外部キー制約: 参照なしで INSERT が成功する理由

SQLite3 は外部キー制約をサポートしていますが、挿入しようとすると問題が発生します。制約に従わずに子テーブルにレコードを追加します。この謎めいた動作に困惑する可能性があります。

この謎を解明するために、提供されている SQL スクリプトを調べてみましょう。 「Persons」と「Orders」の 2 つのテーブルを確立します。「Orders」の「P_Id」は、「Persons」の主キーを参照する外部キーです。

「Orders」テーブルにデータを挿入すると、空の「Peoples」テーブルでも、挿入はエラーなしで続行されるようです。これは、SQLite3.x では外部キー制約が自動的に有効にならないためです。

この異常を修正し、外部キーの整合性を強制するには、SQLite データベースへの接続を確立するたびに次の「PRAGMA」クエリを実行する必要があります。 :

PRAGMA foreign_keys = ON;

このディレクティブを発行すると、SQLite3 はすべての外部キー制約を熱心に強制し、それらに違反する挿入を防ぎます。

この特異性は、SQLite の以前のバージョンである SQLite 2.x とのレガシー互換性に起因しています。ただし、SQLite 4.x では、外部キー制約がデフォルト設定として有効になり、この奇妙な動作は無効になります。

以上がSQLite3 の外部キー制約は、「PRAGMA foreign_keys = ON;」が使用されるまで INSERT に失敗するように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。