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

Erreur 1452 : Cannot add or update a child row [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 14-05-2007 à 17:46:37    

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
Reply

Marsh Posté le 14-05-2007 à 17:46:37   

Reply

Marsh Posté le 15-05-2007 à 11:38:22    

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

Reply

Marsh Posté le 15-05-2007 à 11:39:07    

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.

Reply

Marsh Posté le 15-05-2007 à 11:40:26    

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.

Reply

Marsh Posté le 15-05-2007 à 12:58:06    

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à :)

Reply

Marsh Posté le 15-05-2007 à 15:58:50    

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 ;)

Reply

Marsh Posté le 15-05-2007 à 17:00:10    

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:

Reply

Marsh Posté le 15-05-2007 à 17:01:50    

Ah ben voilà :D

Reply

Marsh Posté le 15-05-2007 à 17:06:27    

MagicBuzz a écrit :

Ah ben voilà :D


Oui comme tu dis  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed