在phpmyadmin中创建2个表时,出现了这样的错误。

MySQL说:文档


  #1215-无法添加外键约束


我的表结构是

CREATE TABLE `iwd_storelocator_manufacturer` (
`entity_id`  int(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name`  varchar(255) NOT NULL ,
`code`  varchar(255) NOT NULL ,
`grayscale_image`  varchar(255) NULL ,
`color_image`  varchar(255) NULL ,
PRIMARY KEY (`entity_id`)
);

CREATE TABLE `iwd_storelocator_manufacturer_to_store` (
`manufacturer_id`  int(11) UNSIGNED NOT NULL ,
`store_id`  int(11) NOT NULL ,
`preferred`  int NULL ,
PRIMARY KEY (`manufacturer_id`, `store_id`),
FOREIGN KEY (`store_id`) REFERENCES `iwd_storelocator_store` (`store_id`) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (`manufacturer_id`) REFERENCES `iwd_storelocator_manufacturer` (`entity_id`) ON DELETE RESTRICT ON UPDATE CASCADE
);


你能告诉我其中有什么问题吗?

这是我的iwd_storelocator_store表

iwd_storelocator_store

最佳答案

为了确切地知道出了什么问题,您必须检入LATEST FOREIGN KEY ERROR部分。

使用此查询可以找出答案:

SHOW ENGINE INNODB STATUS


另外,请确保所有数据类型都相同:子列的数据类型必须与父列的数据类型匹配。

如果问题是表的创建顺序(这可能导致此错误),只需运行set foreign_key_checks=0即可,您可以按任何顺序创建表,而不必在子表之前创建所有父表。

最后,请确保所有表的编码都相同。

编辑:在您的情况下,您还应该给我们iwd_storelocator_store表的结构

现在我们有了您的iwd_storelocator_store表,我认为您应该在store_id列上创建索引,因为它不是表的主键

09-05 06:12