无法解析接近的表名

use*_*962 16 mysql sql reference

我想创建一个对外表的引用.但我收到以下错误:

查询:

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;
Run Code Online (Sandbox Code Playgroud)

SHOW ENGINE INNODB状态\ 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
Run Code Online (Sandbox Code Playgroud)

发表表结构

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

Lor*_*yer 42

只有InnoDB支持外键,MyISAM不支持.即使它会,你也不能在不同类型的表之间建立关系.

因此,您需要将表post转换为InnoDB.ALTER TABLE post ENGINE = InnoDB;

  • New version of mysql has `FULLTEXT` indexes for `InnoDB` (4认同)
  • 男人,MySQL及其糟糕的错误消息.首先它只是告诉你它没有任何细节就无法创建外键.所以你必须找出细节的位置.然后它告诉你它无法解析显然存在的表的名称.所以现在错误可以在任何地方.感谢God Over Stack Overflow. (3认同)