Bonjour,
J'ai plusieurs tables dans ma base de données mais pour l'exemple, je vais m'arrêter à 3 d'entre elles.
La base de données stocke des créations artistiques. Pour chaque oeuvre, outre son titre, on a un matériau utilisé (acrylique, fusain, ...) et un type d'oeuvre (dessin, peinture, ...). On a ainsi :
- 2 tables parentes : "Matter" et "Type"
- 1 table enfant : "Artwork"
Elles sont configurées ainsi :
Matter
Type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE `Matter` ( `idMatter` int(11) NOT NULL, `Matter` varchar(30) COLLATE latin1_general_ci NOT NULL, `DateModification` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='Matter used in the work'; ALTER TABLE `Matter` ADD PRIMARY KEY (`idMatter`); ALTER TABLE `Matter` MODIFY `idMatter` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE `Type` ( `idType` int(11) NOT NULL, `Type` varchar(30) COLLATE latin1_general_ci DEFAULT NULL, `DateModification` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='Type of work'; ALTER TABLE `Type` ADD PRIMARY KEY (`idType`); ALTER TABLE `Type` MODIFY `idType` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
Artwork
Problème rencontré :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 CREATE TABLE `Artwork` ( `id` int(11) NOT NULL, `Reference` varchar(9) COLLATE latin1_general_ci NOT NULL, `Title` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, `Type` int(11) DEFAULT NULL, `Matter` int(11) DEFAULT NULL, `Support` int(11) DEFAULT NULL, `Dimensions` int(11) DEFAULT NULL, `Theme` int(11) DEFAULT NULL, `Filename` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, `Year` year(4) DEFAULT NULL, `Status` int(11) NOT NULL, `DateCreation` timestamp NOT NULL DEFAULT current_timestamp(), `DatePublication` timestamp NULL DEFAULT current_timestamp(), `DateModification` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(), `DateExpiration` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT='Art work'; ALTER TABLE `Artwork` ADD PRIMARY KEY (`id`), ADD KEY `fk_Matter` (`Matter`), ADD KEY `fk_Support` (`Support`), ADD KEY `fk_Dimensions` (`Dimensions`); ALTER TABLE `Artwork` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=96;
Tandis que la clé étrangère s'est bien créée dans 'Artwork' pour le champ 'idMatter' de la table 'Matter'. En revanche, c'est pour la clé étrangère du champ 'Type' que je rencontre ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`devel_sh-art`.`#sql-69d_98a`, CONSTRAINT `fk_Type` FOREIGN KEY (`Type`) REFERENCES `Type` (`idType`) ON UPDATE CASCADE)
.
J'avais créé la clé étrangère par l'interface graphique de phpmyadmin. Devant l'erreur rencontrée, j'ai ensuite tapé en ligne de commande :
Toujours la même erreur bien sûr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ALTER TABLE `Artwork` ADD CONSTRAINT `fk_Type` FOREIGN KEY (`Type`) REFERENCES `Type`(`idType`) ON DELETE RESTRICT ON UPDATE RESTRICT;
Au secours !
Partager