Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas ajouter une contrainte de clé étrangère dans MySQL ?

Pourquoi ne puis-je pas ajouter une contrainte de clé étrangère dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-18 20:16:10848parcourir

Why Can't I Add a Foreign Key Constraint in MySQL?

Dépannage des erreurs de contrainte de clé étrangère MySQL

Les contraintes de clé étrangère (FK) de MySQL garantissent l'intégrité des données en reliant les tables. Cependant, l’ajout de FK peut parfois produire des erreurs. Ce guide aide à résoudre le problème courant « Impossible d'ajouter une contrainte de clé étrangère ».

Le problème :

Lors de l'ajout de contraintes FK entre les tables Patient et Appointment, vous pouvez rencontrer cette erreur :

<code>ERROR 1215 (HY000): Cannot add foreign key constraint</code>

Trouver la cause :

Pour diagnostiquer le problème, utilisez cette commande :

<code class="language-sql">SHOW ENGINE INNODB STATUS;</code>

Examinez attentivement la section « DERNIÈRE ERREUR DE CLÉ ÉTRANGÈRE » de la sortie.

La solution :

Une cause fréquente est une incompatibilité de type de données entre les colonnes enfant et parent. Par exemple :

  • Patient.MedicalHistory (enfant) pourrait être SMALLINT.
  • medicalhistory.MedicalHistoryID (parent) pourrait être INT.

La solution ? Assurez-vous que le type de données de la colonne enfant correspond précisément au type de données de la colonne parent. Dans ce scénario, modifiez Patient.MedicalHistory en INT.

Pratique recommandée :

Avant de créer des tables avec des FK, exécutez cette commande :

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

Cela vous permet de créer des tables dans n'importe quel ordre sans erreurs de contrainte FK dues à des tables parents manquantes. N'oubliez pas de réactiver les contrôles FK par la suite :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn