|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : août 2007 Messages : 141 ![]() |
Bonsoir,
je pose une question qui revient peut etre souvent mais malgre qq recherches je n ai pas vraiment trouvé de reponses satisfaisantes. Voila, je vous expose ma problematique qui est assez simple et assez souvent vu : creation de plusieurs tables en cascade facon arborescence et je voudrais y inclure un champ qui indique si un user verrouille le repertoire, donc cela veut dire qu a la creation du repertoire le user n est pas renseigné....ce qui se fera plus tard. J'ai donc crée une clé etrangere sur le champ de ce style : Code :
Code :
Pourtant cela ne semble pas fonctionner. Il n'est pas possible de créer une cle etrangere sur un champ non renseigné à l'insertion ? ou dois je mettre NOT NULL default 0 ? ou devons nous modifier les options de "mise à jour" a SET NULL par exemple au lieu de RESTRICT ? Bref si qqun peut me filer un tuyau. Un grand merci d avance. A+ |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Pour que ça fonctionne, il faut que tes deux tables soient en InnoDB...
Tu peux par exemple faire un SHOW CREATE TABLE sur chacune ; à la fin du CREATE, tu dois avoir la clause ENGINE = qui te donne le moteur de stockage. Si ce n'est pas InnoDB, tu peut le modifier ainsi : Code SQL :
ALTER TABLE machin ENGINE = InnoDB ; |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 141 ![]() |
merci pour ta reponse.
Mais elles sont bien en innodb, d ailleurs jai besoin des transactions.... Des que j'insere un enregistrement j'ai droit a une erreur parent/child sur la contrainte d integrite. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Pourrais montrer le CREATE TABLE complet de deux de tes tables liées par une intégrité référentielle, ainsi que la requête qui provoque une erreur ?
|
|
|
00
|
|
|
#5 | ||||
|
Membre du Club
![]() Inscription : août 2007 Messages : 141 ![]() |
Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Si tu ne renseignes pas cette colonne
Code :
`dbOWNER` bigint(20) UNSIGNED DEFAULT NULL Et je doute qu'il la trouve dans la tables users, puisque cette colonne est en auto incrément (donc toujours <>NULL). Il faut donc utiliser le last_insert_id pour alimenter dbOWNER
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 141 ![]() |
Ok, je comprends mieux le pb....
Maintenant, comment faire pour ne pas devoir renseigner la valeur Owner de suite mais le faire plus tard ? On ne doit tout de meme pas supprimer la cle etrangere ? Doit bien exister un moyen de mettre une valeur qui n'est pas dans la table user car je vois qu il y a 2 "triggers" sur les cles etrangeres qui permettent de modifier les valeurs qd y a suppression et mise à jour avec une commande SET NULL à la place de RESTRICT ? Peut etre devrais mettre SET NULL pour les mises à jour sur cette cle etrangere ? Merci pour votre aide en tout cas. |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Si tu souhaites laisser la contrainte en place, je ne vois que 2 solutions:
1/ soit tu récupères l'id de la FK 2/ soit tu "bricoles" ton modèle afin que la contrainte soit satisfaite: 1 ligne avec valeur de l'ID à NULL (mais pb à l'horizon rapport à l'auto-incrément) Si tu veux te passer de la contrainte gérée par le SGBD, l'effort de cohésion/cohérence de ta base sera à ta charge... En définitive, même si ce n'est pas élégant (et peut-être pas portable): Citation:
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 141 ![]() |
Bon alors la je ne comprends pas du tout.
Sur une autre table j ai fait la meme chose, cest a dire que j ai mis default null sur la colonne sur laquelle est definie la cle etrangere et je peux parfaitement inserer des données sans que ca coince. Mais sur cette table, pourtant identique sur le fonctionnement, il y a un soucy.... Est ce que cela ne viendra pas d'EMS MySQL (version 2005) par hasard ? cest avec lui que j ai cree mes contraintes. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com