Question

Je sens que j'ai tout essayé possible sur une paire très simple de créer des déclarations de table.

Les types correspondent, j'ai essayé d'utiliser MOTEUR = InnoDB, etc et je suis perplexe pourquoi je reçois l'erreur de clé étrangère.

J'ai été loin de SQL pendant un certain temps, il est sans doute facile.

mysql> CREATE TABLE foo_ent(yyy_no VARCHAR(80),
    -> zoo VARCHAR(80),
    -> PRIMARY KEY (yyy_no));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE cat_ent(some_item INTEGER,
    -> yyy_no VARCHAR(80),
    -> apple DECIMAL(6,2),
    -> PRIMARY KEY (some_item),
    -> FOREIGN KEY (yyy_no) REFERENCES foo_ent);
ERROR 1005 (HY000): Can't create table 'test.cat_ent' (errno: 15
0)

Désolé les noms de variables pauvres, en toute sécurité à des choses de l'entreprise sur-écriture.

Était-ce utile?

La solution

Vous ne fait pas référence à un champ, seule une table, ce qui est incorrect.

...
foreign key (yyy_no) references foo_ent(yyy_no)

Et selon votre numéro d'erreur, la documentation de MySQL indique également;

Si vous recréez une table qui était larguée, il doit avoir une définition qui est conforme à la clé étrangère contraintes faisant référence. Il doit ont les noms de la colonne de droite et types, et il doit avoir des indices sur la clés référencés, comme indiqué précédemment. Si ce ne sont pas satisfaits, les retours de MySQL numéro d'erreur 1005 et fait référence à l'erreur 150 dans le message d'erreur.

http: //dev.mysql. com / doc / refman / 5.5 / fr / InnoDB-clé étrangère constraints.html

Autres conseils

Vous devez fournir le nom de la colonne référencée explicitement:

CREATE TABLE cat_ent
        (
        some_item INTEGER NOT NULL,
        yyy_non VARCHAR(80),
        apple DECIMAL(6,2),
        PRIMARY KEY (some_item),
        FOREIGN KEY (yyy_non) REFERENCES foo_ent(yyy_no)
        );

Considérez réécrire votre déclaration FOREIGN KEY à la liste explicitement la colonne dans foo_ent que vous souhaitez touche:

CREATE TABLE cat_ent (some_item INTEGER, yyy_no VARCHAR (80), DECIMAL de pomme (6,2), KEY primaire (some_item), FOREIGN KEY (yyy_no) RÉFÉRENCES foo_ent (yyy_no)) MOTEUR = InnoDB;

fonctionne pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top