Jump to content
Sign in to follow this  
syrine01

Cannot add or update a child row: a foreign key constraint fails

Rate this topic

Recommended Posts

j'ai un petit souci avec cette erreur ! Cela fait 4h que je cherche sur le net mais je ne trouve rien qui me permet de résoudre le problème pour les 2 tables.

lorsque j'insère une une demande de congé ou d'absence dans la table demande ili affiche cet erreur :
Cannot add or update a child row: a foreign key constraint fails (`grh`.`demandes`, CONSTRAINT `hyht` FOREIGN KEY (`id_demande`) REFERENCES `login` (`id_login`) ON DELETE CASCADE ON UPDATE CASCADE)



Voici mes requêtes de création de table employées:


CREATE TABLE IF NOT EXISTS `employees` (
`id_employe` int(11) NOT NULL,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`CIN` int(10) NOT NULL,
`tel` int(10) NOT NULL,
`etatcivil` varchar(20) NOT NULL,
`dateN` date NOT NULL,
`sexe` varchar(20) NOT NULL,
`situation` varchar(20) NOT NULL,
`nbreenfants` int(5) NOT NULL,
`adresse` varchar(20) NOT NULL,
`ville` varchar(20) NOT NULL,
`email` varchar(20) NOT NULL,
PRIMARY KEY (`id_employe`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Voici le code de la création de table demande:



CREATE TABLE IF NOT EXISTS `demandes` (
`id` int(11) NOT NULL,
`id_demande` int(11) NOT NULL,
`nom` varchar(20) NOT NULL,
`prenom` varchar(20) NOT NULL,
`departement` varchar(20) NOT NULL,
`cause` varchar(20) NOT NULL,
`datedebut` date NOT NULL,
`datefin` date NOT NULL,
`nbrejours` int(11) NOT NULL,
`type` varchar(20) NOT NULL,
`statut` text NOT NULL,
PRIMARY KEY (`id`),
KEY `id_demande` (`id_demande`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='stocke les demandes des congés et d’absences ';



Quelqu'un a t il une idée ?


Je n'ai pas l'impression que mes contraintes soient mauvaises !


Merci d'avance

Share this post


Link to post
Share on other sites

Dans les scripts de création de table, on ne voit pas les déclarations des clés étrangères, seulement au vu de ton message d'erreur, il doit y en avoir. Ce qui me fait penser que tes scripts de création ne sont pas a jour


  • Upvote 1

Share this post


Link to post
Share on other sites

oui c'est vrai pour la table "employees" je n'ajoute pas de clé étrangére car j'ai pas le besoin

mais pour la table "demande " j'ai ajouter une clé etrangére voila ici

2459221612.png

est ce que il faut modifier manuellement !!!

Edited by syrine01

Share this post


Link to post
Share on other sites

Elle ne me parait pas logique ta clé, pourquoi as tu liés id_demande à id_login? normalement la clé étrangère représente le même élément dans des tables différentes.



Ton message d'erreur est lié au fait que mysql ne trouve pas d'id_login = id_demande


Share this post


Link to post
Share on other sites

j'ai liée le id_demande avec id_login car j'ai besoin d'affiche cette demande pour employe selon id_login c'est a dire on va affiché la demande d'employé de id_login =2



comment je peux le corrigé et merci ;)


Share this post


Link to post
Share on other sites

Pour une logique convenable il aurait été préférable de nommer le champs id_demande en id_login.



Par contre l'erreur sera toujours la, puisque mysql ne trouve pas l'id_login correspondant


Share this post


Link to post
Share on other sites

Non ce n'est pas ça que je veux dire.



Le problème, je te l'ai dit 2 fois déjà, quand tu fais ton insertion, il faut absolument que tu renseignes la valeur d'id_demande et que celle-ci soit égale à une valeur de id_login présente dans la table login


Share this post


Link to post
Share on other sites

merci pour votre réponse mais comment je corrige ce probléme!!


car j'ai besion de cette clé étrangére pour afficher la demande pour chaque employé selon le id_login


plz aider moi et encore mercii


Share this post


Link to post
Share on other sites

Qu'est ce que tu n'as pas compris dans ma réponse, je te dis exactement ce que tu dois faire


Share this post


Link to post
Share on other sites

comment je peux faire ça en SQL "il faut absolument que tu renseignes la valeur d'id_demande et que celle-ci soit égale à une valeur de id_login présente dans la table login"



est ce que ce doit initialiser le id_demande et id_login NULL !!


Edited by syrine01

Share this post


Link to post
Share on other sites

Que n'arrives tu pas a comprendre dans cette phrase, elle est pourtant simple non?





quand tu fais ton insertion, il faut absolument que tu renseignes la valeur d'id_demande et que celle-ci soit égale à une valeur de id_login présente dans la table login





A aucun moment je ne parle de valeur NULL, je te parle d'une valeur existante dans la table login


Share this post


Link to post
Share on other sites

oui merci bcp j'ai résoudre le problème de cette erreur mais lorsque le méme utilisateur faire une autre demande il affiche ce msg :" Duplicate entry '1' for key 'PRIMARY'"



et la demande ne sera pas stockée dans bd ,



plz comment j’évite ce probléme merci


Share this post


Link to post
Share on other sites

C'est ton champs id qui doit s’incrémenter, il est courant de mettre les clés primaires en auto_increment


Share this post


Link to post
Share on other sites

oui merci j'ai corrigé ce probléme :)


mais le id_demande me prend pas les valeurs de l'id_login automatiquement !


car toujours il affiche la meme valeur dans la colonne de id_demande par exemple toujours 1


mais c'est pas ça mon besoin , j'ai que l'id_demande pour chaque utilisateur est unique par exemple: un utilisateur de l'id_login =1 fait sa demande , elle est stockée dans la table demande avec id_demande =1 et un autre utilisateur de l'id_login =2 fait sa demande , elle est stockée dans la table demande avec id_demande =2



comment faire corrigé ce probléme!!


Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...