Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens l'erreur MySQL 150 : Échec de la contrainte de clé étrangère ?

Pourquoi est-ce que j'obtiens l'erreur MySQL 150 : Échec de la contrainte de clé étrangère ?

DDD
DDDoriginal
2024-11-19 09:55:03652parcourir

Why Am I Getting MySQL Error 150: Foreign Key Constraint Failure?

MySQL Errno 150 : Échec de la contrainte de clé étrangère

Lors de la tentative de création d'une contrainte de clé étrangère, les utilisateurs peuvent rencontrer l'erreur n° 150. Une clé étrangère la contrainte garantit l'intégrité des données en référençant un champ dans une autre table, forçant le champ référencé à exister dans la source table.

Cause potentielle : écart de type de données

Une cause fréquente de l'erreur n° 150 est une divergence dans les types de données entre la colonne référencée dans la table enfant (Sections) et la colonne de clé primaire dans la table référencée (Instructeurs).

Exemple :

create TABLE Instructors (
  ...
  ID int(10),
  ...
);
create table Sections (
  ...
  Instructor_ID varchar(10),
  ...
  FOREIGN KEY (Instructor_ID) REFERENCES Instructors(ID)
  ...
);

Dans cet exemple, la colonne ID de la table Instructeurs est définie comme un entier, tandis que l'Instructor_ID La colonne de la table Sections est définie comme une chaîne. Cette différence de types de données empêche l'établissement de la contrainte de clé étrangère.

Solution :

Pour résoudre ce problème, assurez-vous que les types de données des colonnes référencées dans les deux les tableaux correspondent. Dans l'exemple ci-dessus, remplacez Instructor_ID par un type de données entier :

create table Sections (
  ...
  Instructor_ID int(10),
  ...
);

Autres causes potentielles :

  • Clé primaire non définie : La table référencée (Instructeurs) peut ne pas avoir de clé primaire défini.
  • Violation de l'intégrité des données : Une ligne existante dans la table enfant (Sections) peut contenir une valeur de clé étrangère qui n'existe pas dans la table référencée (Instructeurs).
  • Syntaxe incorrecte : Assurez-vous que la syntaxe de la contrainte FOREIGN KEY est correcte, y compris ON DELETE et ON Clauses MISE À JOUR.

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