Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur SQL (1452)

Sujet résolu
    12 septembre 2017 à 18:40:08

    Bonjour,

    Je crée 2 tables, une tableA et une tableB.

    La tableB contient une clé étrangère qui est la clé primaire de la tableA.

    La clé primaire dans la tableA est de type VARCHAR, Not NULL et de Collation Utf8_Bin

    Cependant dans ma tableB, la colonne qui contient ma clé étrangère est aussi de type VARCHAR, Collation Utf8_Bin mais contient des valeurs vides.

    Donc quand j’essaie de faire la relation, j'obtiens cette erreur "erreur sql (1452) : cannot add or update a child row: a foreign key constraint fails

    Ma question est de savoir pourquoi et aussi est ce que ma config est juste ?

    Merci,

    • Partager sur Facebook
    • Partager sur Twitter
      13 septembre 2017 à 8:36:24

      Bonjour,

      ableur a écrit:

      la colonne qui contient ma clé étrangère est aussi de type VARCHAR, Collation Utf8_Bin mais contient des valeurs vides.

      Valeurs vides ou NULL ? Ce n'est pas la même chose ...

      ableur a écrit:

      erreur sql (1452) : cannot add or update a child row: a foreign key constraint fails 

      Cela signifie que des valeurs dans la table B n'existe pas dans la table A ...

      Au passage, une clé primaire VARCHAR n'est pas très pertinent, surtout si tu as par la suite des clés étrangères ... Un id entier auto incrémenté est préférable car il utilise seulement 4 octets ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        13 septembre 2017 à 10:00:49

        Bonjour Benzouye,

        Merci pour ton aide.

        Je dirai plutôt la colonne qui est sensé contenir la clé étrangère pour avoir une relation entre les 2 tables est configurée comme mentionné plus haut  c'est à dire: VARCHAR, Collation Utf8_Bin

        Pour ta question, la réponse est vide, c'est à dire ""; il n'est pas marqué dans la table et dans cette colonne NULL.

        Tu as écrit:
        Cela signifie que des valeurs dans la table B n'existe pas dans la table A ...
        
        

        J'ai aussi fait cette analyse, mais je n'arrive pas à comprendre et peut être ton retour va m'aider à mieux comprendre:

        Est-ce à dire qu'une valeur renseignée dans la colonne (clé étrangère) tableB doit obligatoirement figurée dans la colonne (clé primaire) tableA ?

        Par exemple dans mon cas des champs vides

        Merci,

        • Partager sur Facebook
        • Partager sur Twitter
          13 septembre 2017 à 11:47:49

          ableur a écrit:

          Est-ce à dire qu'une valeur renseignée dans la colonne (clé étrangère) tableB doit obligatoirement figurée dans la colonne (clé primaire) tableA ?

          Et oui, c'est le principe même de la clé étrangère ... Tu ne peux pas créer un enregistrement si il ne peut être référencés dans la table de référence ...

          Si dès fois c'est vide il faut mettre NULL à la place.

          UPDATE maTable
          SET macolonne = NULL
          WHERE macolonne = "";

          -
          Edité par Benzouye 13 septembre 2017 à 11:54:56

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            13 septembre 2017 à 12:03:06

            Hello,

            Penses tu quand remplaçant les champs vide "" par NULL, cela va résoudre mon problème?

            Parce que dans ma tableA (table de réference), la clé primaire est configuré à elle à NOT NULL

            Merci,

            • Partager sur Facebook
            • Partager sur Twitter
              13 septembre 2017 à 13:09:52

              Oui.
              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                14 septembre 2017 à 10:31:28

                Hello Benzouye,

                Merci infiniment, le problème est resolue

                • Partager sur Facebook
                • Partager sur Twitter

                Erreur SQL (1452)

                × 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