每当我尝试在magento中重新索引表时,它会尝试创建一个外键。那不是问题。然而,我得到的错误是。 查看Mysql会出现以下错误:
Error in foreign key constraint creation for table `admin_staging`.`#sql-5f81_690`.
A foreign key constraint of name `admin_staging`.`FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID`
already exists. (Note that internally InnoDB adds 'databasename'
in front of the user-defined constraint name.)
Note that InnoDB's FOREIGN KEY system tables store
constraint names as case-insensitive, with the
MySQL standard latin1_swedish_ci collation. If you
create tables or databases whose names differ only in
the character case, then collisions in constraint
names can occur. Workaround: name your constraints
explicitly with unique names.
当我想知道系统中的外键时,它可以找到ALOT。但不是应该存在的那个。当我执行以下SQL时,它也返回none。
SELECT
*
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME = 'FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID'
PS。还手动使外键不起作用:
ALTER TABLE `catalog_product_flat_1` ADD CONSTRAINT `FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID_TEST` FOREIGN KEY(`entity_id`) REFERENCES `catalog_product_entity`(`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE
我不知道接下来要做什么/检查? PS。我希望这不是一个重复的问题,因为我阅读了大部分内容。
更新
我试图重启mysql服务器。之后我可以添加外键。
所以我试图运行索引器..没有成功:(仍然是相同的错误。它成功删除外键但似乎无法再次添加它。
也重新启动,并没有手动添加外键。然后也得到了错误。
真的以为这是一个mysql错误。
UPDATE2
正如SHOW CREATE TABLE
CREATE TABLE `catalog_product_flat_1` (
`entity_id` int(10) unsigned NOT NULL COMMENT 'Entity Id',
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Attribute Set Id',
`type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type Id',
`cost` decimal(12,4) DEFAULT NULL COMMENT 'Cost',
`created_at` timestamp NULL DEFAULT NULL COMMENT 'Created At',
`gift_message_available` smallint(6) DEFAULT NULL COMMENT 'Gift Message Available',
`has_options` smallint(6) NOT NULL DEFAULT 0 COMMENT 'Has Options',
`image_label` varchar(255) DEFAULT NULL COMMENT 'Image Label',
`is_recurring` smallint(6) DEFAULT NULL COMMENT 'Is Recurring',
`links_exist` int(11) DEFAULT NULL COMMENT 'Links Exist',
`links_purchased_separately` int(11) DEFAULT NULL COMMENT 'Links Purchased Separately',
`links_title` varchar(255) DEFAULT NULL COMMENT 'Links Title',
`msrp` decimal(12,4) DEFAULT NULL COMMENT 'Msrp',
`msrp_display_actual_price_type` varchar(255) DEFAULT NULL COMMENT 'Msrp Display Actual Price Type',
`msrp_enabled` smallint(6) DEFAULT NULL COMMENT 'Msrp Enabled',
`name` varchar(255) DEFAULT NULL COMMENT 'Name',
`news_from_date` datetime DEFAULT NULL COMMENT 'News From Date',
`news_to_date` datetime DEFAULT NULL COMMENT 'News To Date',
`price` decimal(12,4) DEFAULT NULL COMMENT 'Price',
`price_type` int(11) DEFAULT NULL COMMENT 'Price Type',
`price_view` int(11) DEFAULT NULL COMMENT 'Price View',
`recurring_profile` text DEFAULT NULL COMMENT 'Recurring Profile',
`required_options` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Required Options',
`shipment_type` int(11) DEFAULT NULL COMMENT 'Shipment Type',
`short_description` text DEFAULT NULL COMMENT 'Short Description',
`sku` varchar(64) DEFAULT NULL COMMENT 'Sku',
`sku_type` int(11) DEFAULT NULL COMMENT 'Sku Type',
`small_image` varchar(255) DEFAULT NULL COMMENT 'Small Image',
`small_image_label` varchar(255) DEFAULT NULL COMMENT 'Small Image Label',
`special_from_date` datetime DEFAULT NULL COMMENT 'Special From Date',
`special_price` decimal(12,4) DEFAULT NULL COMMENT 'Special Price',
`special_to_date` datetime DEFAULT NULL COMMENT 'Special To Date',
`tax_class_id` int(10) unsigned DEFAULT NULL COMMENT 'Tax Class Id',
`thumbnail` varchar(255) DEFAULT NULL COMMENT 'Thumbnail',
`thumbnail_label` varchar(255) DEFAULT NULL COMMENT 'Thumbnail Label',
`updated_at` timestamp NULL DEFAULT NULL COMMENT 'Updated At',
`url_key` varchar(255) DEFAULT NULL COMMENT 'Url Key',
`url_path` varchar(255) DEFAULT NULL COMMENT 'Url Path',
`visibility` smallint(5) unsigned DEFAULT NULL COMMENT 'Visibility',
`weight` decimal(12,4) DEFAULT NULL COMMENT 'Weight',
`weight_type` int(11) DEFAULT NULL COMMENT 'Weight Type',
`manufacturer_sku` varchar(255) DEFAULT NULL COMMENT 'Manufacturer Sku',
`width` varchar(255) DEFAULT NULL COMMENT 'Width',
`depth` varchar(255) DEFAULT NULL COMMENT 'Depth',
`height` varchar(255) DEFAULT NULL COMMENT 'Height',
`stock` int(11) DEFAULT NULL COMMENT 'Stock',
`stock_value` varchar(255) DEFAULT NULL COMMENT 'Stock Value',
`status` smallint(5) unsigned DEFAULT NULL COMMENT 'Status',
PRIMARY KEY (`entity_id`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_TYPE_ID` (`type_id`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_ATTRIBUTE_SET_ID` (`attribute_set_id`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_NAME` (`name`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_PRICE` (`price`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_CREATED_AT` (`created_at`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_STOCK` (`stock`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_STOCK_VALUE` (`stock_value`),
KEY `IDX_CATALOG_PRODUCT_FLAT_1_STATUS` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Catalog Product Flat (Store 1)'
-
CREATE TABLE `catalog_product_entity` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity ID',
`entity_type_id` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Entity Type ID',
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Attribute Set ID',
`type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
`sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
`has_options` smallint(6) NOT NULL DEFAULT 0 COMMENT 'Has Options',
`required_options` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Required Options',
`created_at` timestamp NULL DEFAULT NULL COMMENT 'Creation Time',
`updated_at` timestamp NULL DEFAULT NULL COMMENT 'Update Time',
PRIMARY KEY (`entity_id`),
KEY `IDX_CATALOG_PRODUCT_ENTITY_ENTITY_TYPE_ID` (`entity_type_id`),
KEY `IDX_CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
KEY `IDX_CATALOG_PRODUCT_ENTITY_SKU` (`sku`),
CONSTRAINT `FK_CAT_PRD_ENTT_ATTR_SET_ID_EAV_ATTR_SET_ATTR_SET_ID` FOREIGN KEY (`attribute_set_id`) REFERENCES `eav_attribute_set` (`attribute_set_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_CAT_PRD_ENTT_ENTT_TYPE_ID_EAV_ENTT_TYPE_ENTT_TYPE_ID` FOREIGN KEY (`entity_type_id`) REFERENCES `eav_entity_type` (`entity_type_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=111152 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Table'
答案 0 :(得分:1)
(渴望评论;到目前为止主要是调试信息......)
我将问题简化为
CREATE TABLE so729_flat (
entity_id INT UNSIGNED NOT NULL,
PRIMARY KEY(entity_id)
);
CREATE TABLE so729_cpe (
entity_id INT UNSIGNED NOT NULL,
PRIMARY KEY(entity_id)
);
ALTER TABLE `so729_flat`
ADD CONSTRAINT FOREIGN KEY(`entity_id`)
REFERENCES `so729_cpe`(`entity_id`)
ON DELETE CASCADE ON UPDATE CASCADE;
它工作正常。运行ALTER两次后,我得到:
SHOW CREATE TABLE so729_flat \G
CREATE TABLE `so729_flat` (
`entity_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`entity_id`),
CONSTRAINT `so729_flat_ibfk_1` FOREIGN KEY (`entity_id`) REFERENCES `so729_cpe` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `so729_flat_ibfk_2` FOREIGN KEY (`entity_id`) REFERENCES `so729_cpe` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
(包括两个FK - 没用)。
您是否可以尝试简化用例以继续演示问题?或者增强我的例子直到失败?也许在这个过程中你可以发现问题。或者至少可以确定触发问题的原因。
哦,请提供文字,而不是图片。
答案 1 :(得分:0)
我不知道CONSTRAINT_TYPE是否是INFORMATION_SCHEMA.TABLE_CONSTRAINTS的主键的一部分,或者该表是否在CONSTRAINT_NAME上有另一个唯一的键约束。
但您可以在没有CONSTRAINT_TYPE的情况下尝试在INFORMATION_SCHEMA.TABLE_CONSTRAINTS上进行查询。
答案 2 :(得分:0)
看来原始消息是关于它无法创建FK,因为由于某种原因,相关表中的字段entity_id不是唯一的。 你应该试试
abs()
也可以在catalog_product_flat_1表上试一下,看看是否删除了任何表格中的重复记录。