19

我想创建对外部表的引用。但我收到以下错误:

询问:

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;

显示引擎 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

帖子表结构

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

3 回答 3

47

只有 InnoDB 支持外键,MyISAM 不支持。即使可以,您也无法在不同类型的表之间创建关系。

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

于 2013-08-22T21:39:50.800 回答
1

父表分区时也会出现此错误。从父表中删除分区可以毫无问题地创建外部约束。

于 2017-12-28T03:56:56.140 回答
0

对我来说,这个工作。

CREATE TABLE category_ids (id INT, post_id INT references post(id),
                INDEX par_ind (post_id)
) ENGINE=INNODB;
于 2015-05-18T15:27:16.513 回答