Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 30/09/2011, 14h57   #1
Invité régulier
 
Homme
Développeur informatique
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 5
Points : 5
Par défaut Foreign Key, On Update Cascade..

Bonjour,

Voila j'ai la Table MySQL suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `playlist_line` ( 
`id` VARCHAR(40) NOT NULL, 
`day_id` VARCHAR(40) NOT NULL, 
`line_key` INT(40) NOT NULL AUTO_INCREMENT, 
`parent_key` INT(40) NULL DEFAULT '0', 
`prior_key` INT(40) NULL DEFAULT '0', 
`line_type` INT(1) NULL DEFAULT '0', 
`tcin` INT(11) NULL DEFAULT '0', 
`duration` INT(11) NULL DEFAULT '0', 
... 
PRIMARY KEY (`id`), 
INDEX `FK_playlist_line_day` (`day_id`), 
INDEX `line_key` (`line_key`), 
INDEX `parent_key` (`parent_key`), 
CONSTRAINT `FK_playlist_line_day` FOREIGN KEY (`day_id`) REFERENCES `day` (`id`) ON UPDATE CASCADE ON DELETE CASCADE, 
CONSTRAINT `FK_playlist_line_playlist_line` FOREIGN KEY (`parent_key`) REFERENCES `playlist_line` (`line_key`) ON UPDATE CASCADE ON DELETE CASCADE 
) 
ENGINE=InnoDB
Voici mon problème, quand je fait un update d'un ligne ou je change le champ 'line_key' jai une erreur SQL:
"SQL Error (1451): Cannot delete or update a parent row: a foreign key constraint fails: 'FK_playlist_line_playlist_line'

pourtant avec le on update cascade il ne devrait pas changer la Key dans les lignes fils ?

Ps: Je precise que pour des delete il supprime bien les lignes fils...
merci
Niko2805 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 15h43   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Pour commencer, une clé primaire en VARCHAR(40) ce n'est vraiment pas top !
C'est d'ailleurs line_key qui devrait être en clé primaire puisque c'est la colonne auto-incrémentée de la table.
Par la même occasion, day_id est une clé étrangère et ne devrait donc pas non plus être en VARCHAR(40) car en principe, une clé étrangère référence une clé primaire.

Et comme line_key est auto-incrémentée et devrait être la clé primaire, celle-ci devrait être invariable, ne jamais être modifiée, ce qui fait que ON UPDATE CASCADE est parfaitement inutile !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 18h35   #3
Invité régulier
 
Homme
Développeur informatique
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 5
Points : 5
Merci pour ta reponse,

concernant les clé en varchar(40), c'est que le system qui tourne derriere genere de id de vidéos en chaine de 32 caracteres...

et les Keys correspondent a l'identité des lignes dans ma playliste par jour donc le auto incrément est faux en effet, je l'ai retiré...
Niko2805 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 18h50   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Peu importe ! Ces clés générées par un système externe sont des clés alternatives mais ne doivent pas être utilisées comme clés primaires dans les tables. Lis l'article de SQLPro dont j'ai donné le lien dans mon précédent message.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 18h59   #5
Invité régulier
 
Homme
Développeur informatique
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 5
Points : 5
Très bien, je n'avais pas vu le lien ...
Merci !
Niko2805 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h41.


 
 
 
 
Partenaires

Hébergement Web