Partage
  • Partager sur Facebook
  • Partager sur Twitter

MySQL suppression (erreur de clé étrangère)

    22 février 2012 à 11:11:19

    Bonjour,

    J'ai un problème dans ma BDD MySQL que je n'arrive pas a résoudre... :(

    Pour mieux comprendre, voila les tables en jeu :

    Etape
    numEtape


    Tache
    numEtape
    numTache


    Intervient_tache
    numEtape
    numTache
    numInterv


    Intervenant
    numInterv


    Etape(0,n)----- composer ----- (1,1)Tache
    Tache(0,n)----- affecter ----- (1,1)Interv_tache(1,1)----- affecter ----- (0,n)Intervenant


    Dans chaque table, j'ai uniquement mis les clés primaires. Pour la table Interv_tache, il s'agit de clés primaires d'origine étrangère (champs à la fois clé primaire et clé étrangère), de meme pour le champs numEtape de la table Tache (la tache est relative à l'étape).

    Mon problème survient lorsque j'essaye de supprimer une tache. Avant de supprimer une tache, je supprime bien ses intervenants dans la table Interv_tache (la table fille), mais malgré cela, le même message d'erreur apparait a chaque fois :

    #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`db_test`.`intervient_tache`, CONSTRAINT `fk_interv_etape` FOREIGN KEY (`numEtape`) REFERENCES `tache` (`numEtape`))

    Quelqu'un peut m'aider? :(
    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2012 à 11:33:39

      Faut d'abord supprimer les étapes peut-être ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2012 à 11:38:01

        Eh bien non justement car une étape peut être composée de plusieurs tâches. Et ce que je souhait faire c'est supprimer une tâche sans supprimer l'étape associée.
        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2012 à 13:33:07

          C'est parce que tu as mal déclaré ta FK.

          Dans la table Intervient_tache, c'est (numetape,numtache) qui référence le même (numetape,numtache) de la table tache. Tu as donc une clé étrangère en plusieurs partie.

          Note que répéter numetape dans la table Intervient_tache ne serve à rien, puisque tu as déjà l'id de la tâche, et la tâche contient l'étape.
          • Partager sur Facebook
          • Partager sur Twitter
            22 février 2012 à 14:18:44

            Mais du coup comment gérer cette clé étrangère faisant référence à la clé primaire composée de tache (numEtape, numTache)?

            ALTER TABLE intervient_tache
            ADD CONSTRAINT fk_tache FOREIGN KEY(numTache, numEtape)
            REFERENCES tache(numTache, numEtape)

            On aurait quelque chose dans ce genre?
            • Partager sur Facebook
            • Partager sur Twitter

            MySQL suppression (erreur de clé étrangère)

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown