Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
984 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] Erreur 1452 : Cannot add or update a child row

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Erreur 1452 : Cannot add or update a child row

n°1560337
AlphaZone
Posté le 14-05-2007 à 17:46:37  profilanswer
 

Bonjour,
 
Je travail sur MySQL 5.0.37-nt
J'ai 2 tables en InnoDB. L'une à un index qui fait une référence à un champ sur l'autre table.
 
Voici l'illustration :

Code :
  1. CREATE TABLE MaTable1(
  2.   id int(10) etc....
  3.   constraint pk_id primary key (id)
  4. );
  5. CREATE TABLE MaTable2(
  6.   id int(10) ...,
  7.   id_tbl1 int(10) ...,
  8.   constraint pk_id primary key (id),
  9.   constraint fk_id_tbl1 foreign key (id_tbl1) references MaTable1(id)
  10. );


 
 
Je copie des données provenant d'une autre base de données dans la MaTable1, ensuite je copie les données provenant de cette autre base de données mais de table différente dans MaTable2. Le problème est que MySQL me génère une erreur :

Code :
  1. Error 1452 : Cannot add or update a child row: a foreign key constraint fails (`mibtel/entrg_apeados1`, CONSTRAINT `fk_entrg_apeados1_1` FOREIGN KEY (`ref_documento`) REFERENCES `entrg_apeados` (`ref_documento`) ON DELETE CASCADE)


 
Il va de soit que, dans la base de données existante, les données de la clé primaire sont présentes aussi bien dans la table mère que dans la table fille.  
 
Cette erreur j'arrive à la contourner en supprimant mes références mais ca commence à devenir contraignant pour ma base et les tables que j'avais défini. J'aimerais savoir d'où ça vient? Et pourquoi? Serait-ce parce que la valeur d'un index n'est pas présent dans les valeurs de la clé primaire ?
 
Au passage, serait-il possible de m'expliquer synthétiquement le principe du ON DELETE c'est-à-dire qui agit sur qui et quels sont les actions produites ?  
 
Je vous remercie pour votre aide et votre patiente.


Message édité par AlphaZone le 15-05-2007 à 17:06:49
mood
Publicité
Posté le 14-05-2007 à 17:46:37  profilanswer
 

n°1560568
MagicBuzz
Posté le 15-05-2007 à 11:38:22  profilanswer
 

1/ vide la table fille destination
2/ vide la table mère destination
3/ rempli la table mère destination
4/ rempli la table fille destination

n°1560571
MagicBuzz
Posté le 15-05-2007 à 11:39:07  profilanswer
 

ou alors désactive la FK durant l'allimentation, mais il vaut mieux la conserver tout au long du traîtement, ça permettra de détecter les éventuelles incohérences dans le point 4.

n°1560573
MagicBuzz
Posté le 15-05-2007 à 11:40:26  profilanswer
 

le "on delete" sur un FK (je le vois pas dans ta déclaration par contre) permet de "cascade" le delete d'une mère sur ses filles.
=> tu effaces une lignes dans la table mère, et toutes ses filles sont détruites en même temps, plutôt que de lever une erreur.

n°1560641
AlphaZone
Posté le 15-05-2007 à 12:58:06  profilanswer
 

MagicBuzz a écrit :

1/ vide la table fille destination
2/ vide la table mère destination
3/ rempli la table mère destination
4/ rempli la table fille destination


Au départ, mes tables sont vides et après je rempli d'abord la mère et après la fille. C'est ça que je ne comprend pas :(
 
 
Merci pour toutes les explications. Je respire mieux déjà :)

n°1560728
MagicBuzz
Posté le 15-05-2007 à 15:58:50  profilanswer
 

Sinon, un truc que je pige pas...
 
Le message d'erreur parle de la FK "fk_entrg_apeados1_1"
 
=> Je ne la vois pas dans la définition de la table que tu as posté. A mon avis, tu ne cherches pas au bon endroit...
 
PS : Vérifie si tu n'as pas un trigger quelquepart, comme fouteurs de merde, ils se posent là quand on fait ce genre de maintenance ;)

n°1560775
AlphaZone
Posté le 15-05-2007 à 17:00:10  profilanswer
 

MagicBuzz a écrit :

Sinon, un truc que je pige pas...
 
Le message d'erreur parle de la FK "fk_entrg_apeados1_1"
 
=> Je ne la vois pas dans la définition de la table que tu as posté. A mon avis, tu ne cherches pas au bon endroit...


Oui c'est normal  :jap: . MaTable1 et MaTable2 sont des exemples.
fk_entrg_apeados1_1 provient d'une vraie table que j'utilise.
 
 

MagicBuzz a écrit :


PS : Vérifie si tu n'as pas un trigger quelquepart, comme fouteurs de merde, ils se posent là quand on fait ce genre de maintenance ;)


Je n'en ai pas, ou alors MySQL me joue des tours et aime me faire poiroter  :pt1cable:  mais je ne pense pas que ce soit son genre ^^
 
 
Et pour fini, je viens de comprendre mon erreur. En réalité, dans mes tables existantes, des données dans la table mère ont été supprimées. Alors forcément si j'ajoute des données dans la table fille qui ne le sont pas dans la mère... il y a erreur. :sweat:

n°1560778
MagicBuzz
Posté le 15-05-2007 à 17:01:50  profilanswer
 

Ah ben voilà :D

n°1560788
AlphaZone
Posté le 15-05-2007 à 17:06:27  profilanswer
 

MagicBuzz a écrit :

Ah ben voilà :D


Oui comme tu dis  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] Erreur 1452 : Cannot add or update a child row

 

Sujets relatifs
Cannot redeclare mafonction() (previously declared in C:\wamp\etcComment sortir d'une fonction en renvoyant un message d'erreur
ecrire les log erreur dans un fichier text[Résolu] Comment tester l'existence et supprimer une structure ?
[RESOLU] chaine caractère en parametre de fonction / Javascript[résolu] compilation séparée
taille pour les includes php [résolu][Resolu] [VBA] Macro bibliographie sous word
Webservices et JNI [resolu][Resolu]executer script sur machine distante
Plus de sujets relatifs à : [RESOLU] Erreur 1452 : Cannot add or update a child row


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR