223 votes

Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue

Tableau n° 1 :

Champ d'application

Type

Nul

Clé

Défaut

Extra

ID utilisateur

int(11)

NON

PRI

NULL

auto_increment

Mot de passe

varchar(20)

NON

Nom d'utilisateur

varchar(25)

NON

Courriel

varchar(60)

NON

tableau n° 2 :

Champ d'application

Type

Nul

Clé

Défaut

Extra

ID utilisateur

int(11)

NON

MUL

PostID

int(11)

NON

PRI

NULL

auto_increment

Titre

varchar(50)

NON

Résumé

varchar(500)

NON

Erreur :

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException : Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue ( myapp/table2 , CONSTRAINT table2_ibfk_1 FOREIGN KEY ( UserID ) RÉFÉRENCES table1 ( UserID ))

Qu'ai-je fait de mal ? Je lis http://www.w3schools.com/Sql/sql_foreignkey.asp et je ne vois pas où est le problème.

292voto

Brian Driscoll Points 10188

Vous obtenez cette erreur parce que vous essayez d'ajouter/mettre à jour une ligne dans le fichier table2 qui n'a pas de valeur valide pour l'élément UserID sur la base des valeurs actuellement stockées dans le champ table1 . Si vous affichez un peu plus de code, je pourrai vous aider à diagnostiquer la cause spécifique.

137voto

Rami C Points 456

Cela signifie que vous essayez d'insérer dans table2 a UserID qui n'existe pas dans table1 .

124voto

Sandeep Giri Points 1240

Une solution simple consiste à désactiver les vérifications des clés étrangères avant d'effectuer toute opération sur la table. Il suffit d'interroger

SET FOREIGN_KEY_CHECKS=0

Cela désactivera la correspondance des clés étrangères avec toutes les autres tables. Une fois que vous avez terminé avec la table, réactivez-la.

SET FOREIGN_KEY_CHECKS=1

Cela me réussit souvent.


Veuillez noter que vous entrez alors dans la ZONE DE DANGER. Bien qu'il y ait certainement des cas d'utilisation valables, vous ne devez le faire que si vous êtes certain d'en comprendre les implications.

58voto

NickZoic Points 2406

J'ai découvert un autre cas étrange : Si vous créez accidentellement une clé étrangère d'une table InnoDB vers une table MyISAM, MySQL génère cette erreur au moment de l'insertion, même si les données sont par ailleurs valides.

Voir http://nick.zoic.org/art/mysql-foreign-key-error/

19voto

Justin Points 306

Vous obtenez cette erreur parce qu'il y a des valeurs int table2.UserID qui n'existe pas sur table1.UserID (Je suppose que vous avez mis table2.UserID manuellement avant de créer cette clé étrangère).
Un exemple pour cette scène : table1.UserID obtenir les valeurs 1,2,3 et table2.UserID obtenir les valeurs 4 (ajouter manuellement). Ainsi, lorsque vous créez une clé étrangère, ils ne peuvent pas trouver UserID = 4 de table1 et l'erreur se reproduira.
Pour corriger cette erreur, il suffit de supprimer UserID = 4 de table2 ou vous pouvez les vider tous les deux, puis créer la clé étrangère et.
Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X