ホームページ > データベース > mysql チュートリアル > MySQL で「外部キー制約を追加できません」エラーが発生するのはなぜですか? どうすれば修正できますか?

MySQL で「外部キー制約を追加できません」エラーが発生するのはなぜですか? どうすれば修正できますか?

Mary-Kate Olsen
リリース: 2025-01-18 20:13:10
オリジナル
166 人が閲覧しました

Why Am I Getting a

MySQL 外部キー制約エラー: トラブルシューティングと解決策

外部キーを使用するときに MySQL で「エラー 1215 (HY000): 外部キー制約を追加できません」が発生するのは一般的な問題です。 このエラーは通常、外部キー関係を定義する際のテーブルの作成または変更中に発生します。 多くの場合、問題は関連テーブル間の不一致にあります。

エラー メッセージ自体が必ずしも正確な問題を特定するとは限りません。特定の原因を診断するには、次のコマンドを使用します:

<code class="language-sql">SHOW ENGINE INNODB STATUS;</code>
ログイン後にコピー

失敗した制約の詳細については、LATEST FOREIGN KEY ERROR セクションを調べてください。

根本原因と解決策

最も一般的な原因は、外部キー列 (子テーブル内) と参照される主キー列 (親テーブル内) の間のデータ型の不一致です。 たとえば、子テーブルの列が SMALLINT で、親テーブルの主キーが INT の場合、制約は失敗します。 データ型は正確に一致する必要があります

ベスト プラクティスは、テーブルの作成中、特に複雑なリレーションシップを扱う場合は、外部キー チェックを一時的に無効にすることです。 これにより、依存関係の順序付けが回避されます。 その方法は次のとおりです:

<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0;
-- Your table creation statements here
SET FOREIGN_KEY_CHECKS = 1;</code>
ログイン後にコピー

例: データ型の不一致の修正

Patient テーブルと Appointment テーブルがエラーの原因だとしましょう。 Patient.MedicalHistorySMALLINT であり、medicalhistory.MedicalHistoryIDINT であるとします。 解決策は、型の一貫性を確保することです:

<code class="language-sql">CREATE TABLE IF NOT EXISTS `Patient` (
  `PatientID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `FName` VARCHAR(30) NULL,
  `LName` VARCHAR(45) NULL,
  `Gender` CHAR NULL,
  `DOB` DATE NULL,
  `SSN` DOUBLE NULL,
  `MedicalHistory` INT UNSIGNED NOT NULL,  -- Data type changed to match
  `PrimaryPhysician` SMALLINT(5) UNSIGNED NOT NULL,
  PRIMARY KEY (`PatientID`),
  UNIQUE INDEX `PatientID_UNIQUE` (`PatientID` ASC),
  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
) ENGINE = InnoDB;</code>
ログイン後にコピー

データ型を慎重に照合し、推奨される外部キー チェックの無効化/有効化手法を使用することで、外部キー制約エラーを効果的に解決し、MySQL データベース内で堅牢な関係を確立できます。

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

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