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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?