ホームページ >データベース >mysql チュートリアル >MySQL で「外部キー制約を追加できません」エラーをトラブルシューティングするにはどうすればよいですか?

MySQL で「外部キー制約を追加できません」エラーをトラブルシューティングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-18 20:17:12939ブラウズ

How to Troubleshoot

MySQL 外部キー制約エラーのトラブルシューティング ガイド

はじめに

データベース内のテーブルに外部キー制約を確立すると、作成または変更中にエラーが発生する可能性があります。そのようなエラーの 1 つは、「エラー 1215 (HY000): 外部キー制約を追加できません」です。

ケース: 患者テーブルと予約テーブルの外部キー制約の問題

次の SQL クエリで、Patient テーブルと Appointment テーブルに外部キー制約を追加しようとしたときにエラーが発生しました:

<code class="language-sql">CREATE TABLE IF NOT EXISTS `doctorsoffice`.`Patient` (
...
  CONSTRAINT `FK_MedicalHistory`
    FOREIGN KEY (`MedicalHistory`)
    REFERENCES `doctorsoffice`.`medicalhistory` (`MedicalHistoryID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_PrimaryPhysician`
    FOREIGN KEY (`PrimaryPhysician`)
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS `doctorsoffice`.`Appointment` (
...
  CONSTRAINT `FK_Patient`
    FOREIGN KEY (`Patient`)
    REFERENCES `doctorsoffice`.`Patient` (`PatientID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_Doctor`
    FOREIGN KEY (`Doctor`)
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);</code>

解決策: データ型の互換性を確認する

この問題を解決するには、外部キー制約に関係する列のデータ型に互換性があることを確認してください。この場合、必ず次のことを行ってください:

  • Patient テーブルの MedicalHistory 列のデータ型は、medicalhistory テーブルの MedicalHistoryID 列と正確に一致します。つまり、両方とも INT 型である必要があります。
  • Patient テーブルの PrimaryPhysician 列のデータ型は、医師テーブルの DoctorID 列のデータ型と一致し、両方とも SMALLINT 型である必要があります。

これらのデータ型の不一致を修正した後、外部キー制約を正常に追加できます。

追加のヒント: 外部キーのチェックを無効にする

特定の順序でテーブルを作成する際の柔軟性を高めるには、SQL クエリを実行する前に次のコマンドの使用を検討してください。

<code class="language-sql">SET foreign_key_checks=0;</code>

このコマンドは外部キーのチェックを一時的に無効にし、親子テーブルの依存関係に関係なくテーブルを作成できるようにします。テーブルの作成後、次のコマンドを使用して外部キーのチェックを再度有効にできます:

<code class="language-sql">SET foreign_key_checks=1;</code>

これらのガイドラインに従うことで、外部キー制約がデータベースに正しく実装され、エラーを防止し、データの整合性を維持することができます。

以上がMySQL で「外部キー制約を追加できません」エラーをトラブルシューティングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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