tableau 1
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| UserID | int(11) | NO | PRI | NULL | auto_increment |
| Password | varchar(20) | NO | | | |
| Username | varchar(25) | NO | | | |
| Email | varchar(60) | NO | | | |
+----------+-------------+------+-----+---------+----------------+
tableau 2
+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+----------------+
| UserID | int(11) | NO | MUL | | |
| PostID | int(11) | NO | PRI | NULL | auto_increment |
| Title | varchar(50) | NO | | | |
| Summary | varchar(500) | NO | | | |
+------------------+--------------+------+-----+---------+----------------+
Erreur :
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:
Cannot add or update a child row: a foreign key constraint fails
(`myapp/table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`UserID`)
REFERENCES `table1` (`UserID`))
Qu'est-ce que j'ai fait de mal ? J'ai lu http://www.w3schools.com/Sql/sql_foreignkey.asp et je ne vois pas ce qui cloche.
Vous obtenez cette erreur parce que vous essayez d'ajouter/mettre à jour une ligne dans table2
qui n'a pas de valeur valide pour le champ UserID
sur la base des valeurs actuellement stockées dans table1
. Si vous postez un peu plus de code, je peux vous aider à diagnostiquer la cause spécifique.
Si vous avez inséré une ligne dans la table 1 avant de créer la clé étrangère dans la table 2, vous obtiendrez une erreur de contrainte de clé étrangère, car la valeur d'auto-incrémentation est 2 dans la table 1 et 1 dans la table 2. Pour résoudre ce problème, vous devez tronquer la table 1 et remettre la valeur d'auto-incrémentation à 1. Ensuite, vous pouvez ajouter la table 2.