Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création clé etrangère

Sous MYSQL

    20 février 2011 à 10:28:17

    Bonjour à tous et à toutes,

    J'ai un petit soucis, j'aimerais lié deux table via une clé etrangère mais je n'y arrive pas :s

    Voici ma requete (la table news existe ;) )

    CREATE TABLE apprecier (
    id integer PRIMARY KEY,
    plus integer,
    moins integer,
    num_new integer,
    FOREIGN KEY (num_new) REFERENCES news(id);
    


    Merci d'avance =)
    • Partager sur Facebook
    • Partager sur Twitter
    WikoAndCo.fr - Site communautaire | Sportifs-Connectes - Blog dans le domaine du sport
      20 février 2011 à 13:40:51

      Il me semble qu'il faut créer un index avant de créer la contrainte:
      CREATE TABLE apprecier (
      id integer PRIMARY KEY,
      plus integer,
      moins integer,
      num_new integer,
      INDEX fk_news_apprecier (num_news),
      FOREIGN KEY (num_new) REFERENCES news(id))
      


      Et tu dois utiliser InnoDB comme moteur SQL.
      • Partager sur Facebook
      • Partager sur Twitter
        20 février 2011 à 14:01:45

        Salut,

        ta requete devrait plutot etre comme ceci :
        CREATE TABLE apprecier (
          id integer AUTO_INCREMENT NOT NULL,
          plus integer,
          moins integer,
          num_new integer,
          PRIMARY KEY(id),
          FOREIGN KEY (num_new) REFERENCES news(id)
        ) engine = InnoDB;
        


        L'index n'est nomalement pas obligatoire
        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2011 à 14:07:55

          @ pierreet : merci ça a marché =)

          @luckyboss1 : si un index est obligatoire mais je n'arrivais pas à le créer correctement^^

          Mais logiquement ma table apprecier devrait avoir déjà des champs vu qu'il y a déjà des id dans la table new, nn?
          • Partager sur Facebook
          • Partager sur Twitter
          WikoAndCo.fr - Site communautaire | Sportifs-Connectes - Blog dans le domaine du sport
            20 février 2011 à 18:31:35

            re,

            je te confirme q'un index n'est pas obligatoire, en particulier si tu fais une clé primaire !
            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2011 à 8:17:21

              Citation : luckyboss1

              je te confirme q'un index n'est pas obligatoire, en particulier si tu fais une clé primaire !



              Salut !

              Normalement, oui, un index n'est pas obligatoire mais sous MySQL, t'es obligé d'en faire un pour pouvoir faire des relations.
              • Partager sur Facebook
              • Partager sur Twitter
                21 février 2011 à 13:22:45

                Je ne sais pas ou tu as vu cela, mais je fais des bddr sur mysql depuis un bou de temps, je t'assure que les index ne sont pas obligatoire, car la clé primaire est directement consideré comme un index avec le moteur innoDB
                • Partager sur Facebook
                • Partager sur Twitter
                  21 février 2011 à 13:26:55

                  Oui, pour les clés primaires, MySQL les créés automatiquement.

                  Par contre, t'es obligé d'en créer sur les champs qui contiennent des clés étrangères sinon, tu ne pourras pas faire de relation.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 février 2011 à 9:05:05

                    Si, ça posera problème.

                    Citation : documentation

                    InnoDB requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. (This is in contrast to some older versions, in which indexes had to be created explicitly or the creation of foreign key constraints would fail.) index_name, if given, is used as described previously.


                    Tu n'as pas besoin d'ajouter un index sur la clé primaire simplement car MySQL place automatiquement un index clusterisé dessus.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 février 2011 à 14:29:49

                      c'est exactement ce que j'ai dit plus haut, pas besoin d'index avec mysql !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 février 2011 à 16:41:19

                        Bin si tu as besoin d'index, la documentation le mentionne très clairement. Peut-être t'es tu mal exprimé dans ce message, puisque tu sembles y dire qu'un index est obligatoire dans tous les cas.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 février 2011 à 19:35:23

                          Il confond foreign key et clé primaire, en fait.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 février 2011 à 20:53:03

                            je confirme que tu as mal compris Haku, je disais bien le contraire ^^.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 février 2011 à 18:08:39

                              Citation : Lord Casque Noir

                              Il confond foreign key et clé primaire, en fait.



                              Je confond rien du tout --'

                              Mais c'est reglé j'ai laissé tomber mes tentatives :p
                              • Partager sur Facebook
                              • Partager sur Twitter
                              WikoAndCo.fr - Site communautaire | Sportifs-Connectes - Blog dans le domaine du sport

                              Création clé etrangè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