Frage

Ich habe das Gefühl, ich habe alles möglich mit einem sehr einfachen Paar von Tabellenanweisungen ausprobiert.

Die Typen stimmen überein, ich habe versucht, Engine = InnoDB usw. zu verwenden, und bin verblüfft, warum ich den fremden Schlüsselfehler erhalte.

Ich bin seit einiger Zeit von SQL weg, also ist dies wahrscheinlich einfach.

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)

Entschuldigung für die schlechten Variablennamen, sicher über das Unternehmen über das Unternehmen.

War es hilfreich?

Lösung

Sie beziehen sich nicht auf ein Feld, nur eine Tabelle, die falsch ist.

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

Nach Ihrer Fehlernummer heißt es auch in der MySQL -Dokumentation.

Wenn Sie eine Tabelle neu erstellen, die fallen gelassen wurde, muss eine Definition vorhanden sein, die den fremden Schlüsselbeschränkungen entspricht, die darauf verweisen. Es muss die richtigen Spaltennamen und -Typen haben, und es muss Indizes für die Referenzschlüssel haben, wie bereits erwähnt. Wenn diese nicht erfüllt sind, gibt MySQL die Fehlernummer 1005 zurück und bezieht sich auf Fehler 150 in der Fehlermeldung.

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreigner-y-constraints.html

Andere Tipps

Sie sollten den Namen der referenzierten Spalte ausdrücklich angeben:

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)
        );

Erwägen Sie, Ihre ausländische Schlüsselerklärung neu zu schreiben, um die Spalte in foo_ent explizit aufzulisten, für die Sie einschließen möchten:

TABLE CAT_ENT (SOME_ITEM INTEGER, YYY_NO VARCHAR (80), Apple Decimal (6,2), Primärschlüssel (SOME_ITEM), Fremd Key (yyy_no) Referenzen foo_ent (yyy_no)) Engine = Innodb;

funktioniert bei mir.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top