2013-08-22 4 views
11

auflösen Ich möchte eine Verweise auf fremde Tabelle erstellen. aber ich erhalte den folgenden Fehler:Kann den Tabellennamen nicht in der Nähe von

query:

CREATE TABLE category_ids (id INT, post_id INT, 
        INDEX par_ind (post_id), 
        FOREIGN KEY (post_id) REFERENCES post(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB; 

SHOW ENGINE BDB STATUS \ G:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
2013-08-23 00:11:06 7f6f49e7b700 Error in foreign key constraint of table fun/category_ids: 
FOREIGN KEY (post_id) REFERENCES post(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB: 
Cannot resolve table name close to: 
(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB 

Beiträge Tabellenstruktur

mysql> describe post; 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    | Field  | Type     | Null | Key | Default    | Extra   | 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    | id   | int(11)    | NO | PRI | NULL    | auto_increment | 
... 
    +-------------+-----------------------+------+-----+---------------------+----------------+ 
    22 rows in set (0.00 sec) 
+0

es denkt „post“ ist ein reserviertes Wort, was ist, wenn Sie den Beitrag in dem Fremdschlüssel mit Rücken Zecken (d \ 'Post \' (id)) qualifiziert. –

+0

Haben Sie eine Möglichkeit, zu überprüfen, ob Ihre Tabellen INNODB richtig verwenden und nicht etwas anderes? (Auch wenn Sie es eindeutig geschrieben haben, ja) – Sugar

+0

Sie können 'SHOW CREATE TABLE' verwenden, um das für die referenzierte Tabelle verwendete Modul zu überprüfen. – deltab

Antwort

33

Nur InnoDB unterstützt Foreign Schlüssel, MyISAM nicht. Selbst wenn dies der Fall wäre, können Sie keine Beziehungen zwischen Tabellen unterschiedlichen Typs erstellen.

Daher müssen Sie die Tabelle post in InnoDB konvertieren. ALTER TABLE post ENGINE = InnoDB;

+0

Ich brauche myISAM für Volltextindex :( – user2696962

+0

Sie können Ihren Kuchen nicht haben und es auch essen;) –

+3

Neue Version von mysql hat 'FULLTEXT' Indizes für' InnoDB' – Antoniossss

0

Dieser Fehler kann auch auftreten, wenn die Elterntabelle partitioniert ist. Durch das Entfernen der Partitionierung aus der übergeordneten Tabelle können Fremdeinschränkungen ohne Probleme erstellt werden. Möglicherweise