「整合性制約違反: 子行を追加または更新できません: 外部キー制約が失敗します」というエラーに対処している場合は、正しい記事を参照してください。
通常、このエラーは、テーブルに新しい列を追加し、それを外部キーとして宣言するときに発生します。
SQL データベースでは、外部キーは、別のテーブル内のデータ間のリンクを確立するために使用されるテーブル内のフィールドです。以下の顧客テーブルを考えてみましょう。
次に、顧客をグループにリンクしたいとします。まず、グループ テーブルへの参照を含む新しい列を顧客テーブルに追加する必要があります:
外部キー制約を追加して、グループ テーブルへの関係をアクティブにすることができます:
customers テーブルでこの変更操作を実行すると、データベースは group_id フィールドの ID が groups テーブルに存在することを確認します。
このチェック中に、group_id 列がまだ空であり、グループ テーブルに有効な参照が含まれていないため、データベースは「整合性違反エラー」を発生させます。そのため、SQL エンジンは外部キー制約を適用しようとして失敗します。これは、空の値がグループ テーブルに対する有効な外部キーではないためです。
最も簡単なアクションは、新しい列を null 許容として宣言することです。
変更クエリから「NOT NULL」命令を削除して、group_id 列に null 値を含めることができます。
外部キーも null になる可能性があるため、この単純な変更により、そもそも問題が解決されます。データ移行を実行して、最終的に顧客テーブルの新しい group_id 列を埋め、「NOT NULL」制約を再導入する新しいリリースを計画できます。
アプリケーション内で顧客が特定のグループなしでは存在できない場合は、group_id が null 可能であるため、データベースはこの制約を認識しないことに注意する必要があります。
アプリケーションでエンティティの作成中に間違いを犯した場合、データベースは警告しません。
もう 1 つの解決策は、新しい列を追加するための変更クエリと外部キーを追加するための変更クエリの間にデータ移行ジョブを追加することです。
顧客テーブルに新しい group_id 列を作成したら、スクリプトを実行して、既存の行のこの列にグループ テーブルの有効な ID を入力できます。これは、このタスクを実行するためのクエリの例です:
リーリー
以下の例では、Laravel の移行を使用して整合性制約違反の問題に対処する方法を示します。
移行を作成します:
リーリー
リーリー
https://inspector.dev/how-to-accelerate-application-performance-with-smart-sql-queries/
composer パッケージをインストールするだけで準備完了です。
他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージをお試しください。効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
以上が[解決済み] 整合性制約違反 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。