ホームページ >データベース >mysql チュートリアル >「外部キー制約の追加中に子フィールドのデータ型でエラーが発生しました」というメッセージが表示されるのはなぜですか?

「外部キー制約の追加中に子フィールドのデータ型でエラーが発生しました」というメッセージが表示されるのはなぜですか?

DDD
DDDオリジナル
2025-01-18 20:21:12714ブラウズ

Why Am I Getting

外部キー制約エラーの解決: 「外部キー制約の追加中に子フィールドのデータ型でエラーが発生しました」

このガイドでは、「Patient」、「Appointment」、「MedicalHistory」テーブル間に外部キー関係を作成する際の一般的な SQL エラー「エラー 1215 (HY000): 外部キー制約を追加できません」に対処します。 通常、根本的な原因は、制約に関係する子列と親列の間の型の不一致です。

問題を診断して解決する方法は次のとおりです:

  1. データ型の検証: 関連する列のデータ型を注意深く調べます。「Patient」テーブルの「MedicalHistory」列が「MedicalHistory」テーブルの「MedicalHistoryID」列と正確に一致していることを確認します。 同様に、「Appointment」テーブルの「Patient」列が「Patient」テーブルの「PatientID」列を正確に反映していることを確認します。 たとえ小さな違い (INT と SMALLINT、VARCHAR(255) と VARCHAR(256) など) であっても、制約は追加されません。

  2. 一時的な外部キー チェックの無効化: ALTER TABLE ステートメントを実行して外部キーを追加する前に、SET FOREIGN_KEY_CHECKS=0; を実行してください。これにより、外部キーのチェックが一時的に無効になり、任意の順序でテーブルを作成できるようになります。 後で SET FOREIGN_KEY_CHECKS=1; を使用して再度有効にすることを忘れないでください。

  3. 詳細なエラー分析: SHOW ENGINE INNODB STATUS; を使用して、「LATEST FOREIGN KEY ERROR」セクションを検査します。これにより、失敗した制約に関する具体的な詳細が提供され、問題の原因となっている正確な列が特定されます。

  4. 説明例: 「MedicalHistory」テーブルの「MedicalHistoryID」が INT として定義されている場合、「Patient」テーブルの「MedicalHistory」も必要があります >、INT または他のタイプではありません。SMALLINT

データ型を注意深く比較し、上記の診断ツールを利用することで、この外部キー制約エラーを効果的に解決し、テーブル間に正しい関係を確立できます。 制約を作成した後は、必ず外部キー チェック (

) を再度有効にしてください。SET FOREIGN_KEY_CHECKS=1;

以上が「外部キー制約の追加中に子フィールドのデータ型でエラーが発生しました」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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