|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Bonjour
Je débute complètement dans l'utilisation des clés étrangères sous MySQL. J'ai déjà configuré des liaisons entre tables avec Access, mais c'est pas aussi simple. J'ai 2 tables auth_droits (qui contient la liste des droits d'accès) et auth_profils (qui contient la liste des profils). Le lien doit se faire sur le champ nom_droit, qui est clé primaire de auth_droits (chaque droit est unique) et index simple de auth_profils (chaque profil peut avoir plusieurs droits). J'ai défini la liaison avec l'interface de phpmyadmin, mais lorsque j'essaye de modifier un des droits dans la table principale avec Code :
UPDATE `auth_droits` SET `nom_droit` = 'droit21' WHERE CONVERT( `nom_droit` USING utf8 ) = 'droit2' LIMIT 1 Code :
#1452 - Cannot add or update a child row: a foreign key constraint fails (`middle/auth_droits`, CONSTRAINT `auth_droits_ibfk_1` FOREIGN KEY (`nom_droit`) REFERENCES `auth_profils` (`nom_droit`) ON DELETE CASCADE ON UPDATE CASCADE)
Merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Étudiant Inscription : juillet 2006 Messages : 130 ![]() |
C'est normale, car la contrainte de clé étrangère permet de lier deux champs INTEGRALEMENt, donc il est impossible de le modifier sans rompre le lien de clé etragère
__________________
|
|
|
00
|
|
|
#3 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Citation:
Si j'ai bien compris, l'interêt des clés étrangères est bien de propager une modification d'une table à l'autre, non ? |
|
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : mars 2006 Messages : 72 ![]() |
ton champ nom_droit doit être une cle etrangère referancant un champ d'une autre table.
DOnc tu ne peux mettre comme valeur de ce champ qu'une valeur qui existe dans le champ de la table référencée. fait un show create table <nom de ta table> et tu verras quelle table et quel champ de cette table est référencé. |
|
|
00
|
|
|
#5 | ||||
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Citation:
Citation:
Code :
Désolé pour ces questions de débutant, mais je suis un peu perdu. |
||||
|
|
00
|
|
|
#6 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
(au passage, une clé primaire numérique serait plus efficace, cf http://sqlpro.developpez.com/cours/m...ge=base#L2.5.1 )
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#7 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Citation:
Je crois que j'ai besoin d'un peu de théorie sur le sujet, je vais me plonger dedans. |
|
|
|
00
|
|
|
#8 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Le but principal d'une contrainte de clé étrangère est d'assurer l'intégrité référentielle, c'est à dire de vérifier que chaque ligne de la table enfant ait une correspondance dans la table parent.
En l'occurrence le droit 'droit21' n'existe pas dans la table de référence auth_profils donc impossible d'attribuer ce droit dans une ligne de la table auth_droits. Citation:
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Je crois que j'ai compris, mais à quoi servent donc les propriétés ON DELETE CASCADE et surtout ON UPDATE CASCADE ?
|
|
|
00
|
|
|
#10 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
ON DELETE CASCADE : la suppression d'une ligne de la table parent entraine une suppression de toutes les lignes la référençant dans la table enfant.
ON UPDATE : pareil avec la modification
__________________
Pensez au bouton
|
|
|
00
|
|
|
#11 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Citation:
D'où mon interrogation sur l'erreur |
|
|
|
00
|
|
|
#12 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#13 |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
C'était donc ça... Comme quoi, une erreur de débutant, et on va vite chercher midi à quatorze heure.
Merci à tous, particulièrement maximilan. Question subsidiaire : comment faire pour créer la relation inverse, sachant que phpmyadmin refuse de le faire ? |
|
|
00
|
|
|
#14 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
La relation inverse... c'est à dire ?
__________________
Pensez au bouton
|
|
|
00
|
|
|
#15 | |
|
Membre chevronné
![]() Inscription : janvier 2006 Messages : 917 ![]() |
Citation:
|
|
|
|
00
|
|
|
#16 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Non, c'est uniquement au niveau de la table fille qu'il faut mettre la contrainte de clé étrangère.
__________________
Pensez au bouton
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com