Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible de créer une clé étrangère

le mot REFERENCES n'est pas accepté

Sujet résolu
    4 décembre 2011 à 23:46:23

    Bonjour,

    Je lisais ce tuto sur les clés étrangères :
    http://www.siteduzero.com/tutoriel-3-4 [...] rangeres.html

    En testant la base Commande proposé dans le tuto (en inventant la base Client allant avec) je me retrouve avec une erreur de syntaxe lors de la création de la clé étrangère, que je la créer en même temps que la table ou que je la créer avec alter table.

    J'ai créer deux autres bases fictives pour essayer, le problème persiste.



    mysql> create table membre (membreId int not null primary key auto_increment, membrePseudo varchar(50) not null) engine=InnoBD;
    Query OK, 0 rows affected, 2 warnings (0.10 sec)
    
    mysql> create table commande (commandeId int not null primary key auto_increment, commandeMembreId int not null, commandeContenu varchar(200) not null) engine=InnoBD;
    Query OK, 0 rows affected, 2 warnings (0.11 sec)
    
    mysql> ALTER TABLE commande
        -> ADD CONSTRAINT fk_commandeMembreId_membreId FOREIGN KEY commandeMembreId REFERENCES membre(membreId);
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES membre(membreId)' at line 2
    
    -- paf...
    


    Bref, le mot REFERENCES provoque une erreur de syntaxe.

    Comment est-ce explicable ?


    Merci d'avance.


    edit.

    Plus loin dans le tutoriel, l'auteur utilise des parenthèse pour la valeur de foreign key, j'ai essayé, ça ne fonctionne toujours pas mais l'erreur est différente.



    mysql> show columns from animal; show columns from espece;
    +----------------+------------------------+------+-----+---------+----------------+
    | Field          | Type                   | Null | Key | Default | Extra          |
    +----------------+------------------------+------+-----+---------+----------------+
    | id             | smallint(6)            | NO   | PRI | NULL    | auto_increment |
    | sexe           | enum('male','femelle') | YES  |     | NULL    |                |
    | date_naissance | datetime               | NO   |     | NULL    |                |
    | nom            | varchar(30)            | YES  |     | NULL    |                |
    | commentaires   | text                   | YES  |     | NULL    |                |
    | espece_id      | smallint(6)            | YES  |     | NULL    |                |
    +----------------+------------------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    
    +-------------+-------------+------+-----+---------+----------------+
    | Field       | Type        | Null | Key | Default | Extra          |
    +-------------+-------------+------+-----+---------+----------------+
    | id          | smallint(6) | NO   | PRI | NULL    | auto_increment |
    | nom_courant | varchar(40) | NO   |     | NULL    |                |
    | nom_latin   | varchar(40) | NO   | UNI | NULL    |                |
    | description | text        | YES  |     | NULL    |                |
    +-------------+-------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    
    mysql> alter table animal add constraint fk_espece_id foreign key (espece_id) references espece(id);
    ERROR 1005 (HY000): Can't create table 'elevage.#sql-3f5_25' (errno: 150)
    


    Les deux colonnes sont pourtant identiques, cette erreur est sensé venir (d'après la doc) quand par exemple l'une des deux columns est unsigned et l'autre signed, mais ce n'est pas le cas ici.

    Je ne comprend pas. :o
    • Partager sur Facebook
    • Partager sur Twitter
      5 décembre 2011 à 8:54:49

      Tu as des erreurs si tu ajoutes des quotes :

      ADD CONSTRAINT 'fk_commandeMembreId_membreId' FOREIGN KEY ('commandeMembreId') REFERENCES 'membre' ('membreId');
      


      ?
      • Partager sur Facebook
      • Partager sur Twitter
        5 décembre 2011 à 11:54:36

        C'est ENGINE=InnoDB, pas InnoBD
        • Partager sur Facebook
        • Partager sur Twitter
          5 décembre 2011 à 20:39:47

          Je vais me le faire tatouer. Merci.
          • Partager sur Facebook
          • Partager sur Twitter

          Impossible de créer une 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