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>
解決策: データ型の互換性を確認する
この問題を解決するには、外部キー制約に関係する列のデータ型に互換性があることを確認してください。この場合、必ず次のことを行ってください:
これらのデータ型の不一致を修正した後、外部キー制約を正常に追加できます。
追加のヒント: 外部キーのチェックを無効にする
特定の順序でテーブルを作成する際の柔軟性を高めるには、SQL クエリを実行する前に次のコマンドの使用を検討してください。
<code class="language-sql">SET foreign_key_checks=0;</code>
このコマンドは外部キーのチェックを一時的に無効にし、親子テーブルの依存関係に関係なくテーブルを作成できるようにします。テーブルの作成後、次のコマンドを使用して外部キーのチェックを再度有効にできます:
<code class="language-sql">SET foreign_key_checks=1;</code>
これらのガイドラインに従うことで、外部キー制約がデータベースに正しく実装され、エラーを防止し、データの整合性を維持することができます。
以上がMySQL で「外部キー制約を追加できません」エラーをトラブルシューティングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。