Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2007, 18h51   #1
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 75
Points : 15
Points : 15
Par défaut Ajouter clé étrangère à table non vide sans erreur 1452?

Bonjour,

Comment ajouter une clé étrangère sur une colonne d'une table "parent" (ou "mère" ;o) qui ferait référence à la clé primaire d'une table "enfant" (ou "fille" ;o) mais alors que la table "parent" n'est pas vide?

Exemple,

J'ai une table "enfant"
Code :
1
2
3
4
5
CREATE TABLE `categorie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `label` varchar(255) collate utf8_unicode_ci NOT NULL
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
puis une table "parent"
Code :
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `objets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `categorieId` int(11) NOT NULL
  `titreFr` varchar(255) collate utf8_unicode_ci NOT NULL,
  `titreEn` varchar(255) collate utf8_unicode_ci DEFAULT NULL
  `descriptionFr` text collate utf8_unicode_ci,
  `descriptionEn` text collate utf8_unicode_ci
  PRIMARY KEY  (`id`),
  KEY `categorieId` (`categorieId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=230 ;
C'est donc cette deuxième table qui n'est pas vide.

OK, je peux copier ma table `objets` (structure et données) puis la vider et puis ce sera possible d'ajouter la relation via un
Code :
1
2
ALTER TABLE `objets` ADD FOREIGN KEY ( `categorieId` ) 
REFERENCES `mydatabase`.`categorie` ( `id` );
et ceci sans obtenir une erreur 1452 de type "Cannot add or update a child row: a foreign key constraint fails..."

Mais, ensuite, comment repeupler la table "parent" qui n'était pas vide au début?
gb-ch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 23h51   #2
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Il se peut que je n'ai rien compris... En tout cas je ne pense que ça soit possible et surtout je ne vois pas l'utilité de mettre des clés étrangères entre deux tables si tu ne renseignes pas la table mère. En effet, les clés étrangères permettent de respecter des contraintes entre les données or ta technique revient à passer outre ces contraintes...
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 15h20   #3
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 75
Points : 15
Points : 15
J'ai dû mal m'exprimer... Posons les bases...

Celle que j'apelle table mère c'est celui qui a la clé étangère et celle que j'apelle table fille c'est la table liée. En d'autres termes, la valeur de ma colonne clé étrangère dans la table mère = valeur de ma clé primaire dans la table fille.

Dans mon exemple, 'objets' est la table mère et 'categorie' la table fille. La colonne 'categorie_id' de ma table mère 'objets' fait référence à la clé primaire 'id' de ma table 'categorie' fille.

Voici l'explication de ma question...

J'ai à la base que la table 'objets' et celle-ci n'est pas vide. Mais la colonne 'categorie_id' était à NULL jusqu'à présents pour toutes les lignes. Maintenant, j'aimerais créer ma table 'categorie' et j'aimerais créer cette relation. Impossible! Je dois d'abord vider la table et ensuite je peux créer ma relation. Mais ensuite comment repeupler ma table 'objets' sans abotenir une erreur 1452 de type "Cannot add or update a child row: a foreign key constraint fails..."?

Merci...
gb-ch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 15h49   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
sur objets, enlève la déclaration de CategorieID comme NOT NULL.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 20h42   #5
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 75
Points : 15
Points : 15
OK, merci!
gb-ch est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h03.


 
 
 
 
Partenaires

Hébergement Web