[解決済み] 整合性制約違反 – 簡単なヒント

WBOY
リリース: 2024-08-17 22:50:09
オリジナル
846 人が閲覧しました

「整合性制約違反: 子行を追加または更新できません: 外部キー制約が失敗します」というエラーに対処している場合は、正しい記事を参照してください。

通常、このエラーは、テーブルに新しい列を追加し、それを外部キーとして宣言するときに発生します。

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 の移行の使用

最新のアプリケーションでは、これらのタスクはすべて移行ツールを使用して実行されます。通常、最も一般的なアプリケーション開発フレームワークで使用できます。

以下の例では、Laravel の移行を使用して整合性制約違反の問題に対処する方法を示します。

移行を作成します:


リーリー

以下に示すように、移行を 2 つの部分に分けることができます:


リーリー

データベースのパフォーマンスの向上に興味がある場合は、「スマート データベース クエリ」に関する以下の記事を参照してください:

https://inspector.dev/how-to-accelerate-application-performance-with-smart-sql-queries/

検査官は初めてですか?アプリケーションを無料で監視する

Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。

composer パッケージをインストールするだけで準備完了です。

他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージをお試しください。

効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。

または、Web サイトで詳細をご覧ください: https://inspector.dev

[Resolved] Integrity constraint violation – Fast tips

以上が[解決済み] 整合性制約違反 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!