ホームページ > データベース > mysql チュートリアル > SQLite3 がデフォルトで外部キー制約を強制しないのはなぜですか?

SQLite3 がデフォルトで外部キー制約を強制しないのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-05 10:10:40
オリジナル
135 人が閲覧しました

Why Doesn't SQLite3 Enforce Foreign Key Constraints by Default?

SQLite3 外部キー制約の強制の説明

SQLite3 では、外部キー制約はデフォルトでは強制されません。この動作は他のほとんどのリレーショナル データベース管理システム (RDBMS) とは異なるため、堅牢な制約の適用に慣れている開発者の間で混乱が生じます。

問題の説明

次の例を考えてみましょう: 2 つのテーブル、Persons を作成します。 Orders には、Persons の主キーを参照する外部キー制約があります。この制約が定義されているにもかかわらず、Persons に対応するレコードがなくても Orders に行を挿入できます。

根本原因と解決策

SQLite3 バージョン 3.x 以前では、外部キー制約を明示的に指定する必要があります。データベースに接続するたびに次のクエリを使用して有効にします:

PRAGMA foreign_keys = ON;
ログイン後にコピー

これは、SQLite3 が以前のバージョンとの下位互換性を維持しているためです。

強制を無効にする理由

デフォルトで外部キーの強制を無効にするという決定は、主に、SQLite の組み込みデータベースとしての SQLite の伝統によって決定されました。パフォーマンスが重要なアプリケーションで使用します。外部キー制約は、特に同時実行性の高いシナリオでパフォーマンスに影響を与える可能性があります。

将来のバージョンに関する考慮事項

SQLite4.x では、外部キー制約がデフォルトで有効になります。この変更は、現在の動作によって引き起こされる潜在的な混乱と不満に対処します。

実際的な影響

提供された例のコンテキストでは、PRAGMA foreign_keys = ON; を実行する必要があります。外部キーの強制を有効にするステートメント。その後、個人に対応するレコードがない状態でレコードを注文に挿入すると、予想どおりエラーが発生します。

以上がSQLite3 がデフォルトで外部キー制約を強制しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート