You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL删除自引用外键约束时触发#1091错误的技术咨询

Magento 2数据库迁移:重复外键约束与删除失败问题解决

问题现象

迁移Magento 2数据库时触发以下错误:

SQLSTATE[HY000]: General error: 1826 Duplicate foreign key constraint name `MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID`

原因是Magento尝试创建的外键约束已存在,但执行删除语句时:

ALTER TABLE `mga7_catalog_category_entity_decimal`
DROP FOREIGN KEY `MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID`;

MySQL返回#1091错误,提示约束不存在,可通过以下查询却能查到该约束:

SELECT CONSTRAINT_NAME 
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID';

核心原因

出现这种矛盾的常见原因有三个:

  • 约束不属于目标表:原查询未限定数据库和表名,可能查到其他表的同名约束
  • 大小写不匹配:Linux环境下MySQL对表名、约束名区分大小写,若实际约束名大小写与执行语句不一致会导致删除失败
  • 约束类型错误:TABLE_CONSTRAINTS包含主键、唯一键、外键等所有约束类型,你查到的可能不是外键,而是其他类型约束

解决步骤

1. 精准定位约束信息

先执行以下查询,明确约束所属的数据库、表和类型:

SELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID'
AND TABLE_SCHEMA = '你的数据库名称'; -- 替换为实际数据库名

2. 确认外键关联细节

进一步查询约束的关联列和表,避免误删:

SELECT TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  
WHERE CONSTRAINT_NAME = 'MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID'
AND TABLE_SCHEMA = '你的数据库名称';

3. 正确删除外键

根据上述查询结果,执行对应操作:

  • 如果约束确实属于mga7_catalog_category_entity_decimal表且为外键,确保删除语句中的表名、约束名大小写与实际一致(比如Linux环境下严格匹配),重新执行删除
  • 如果约束属于其他表,切换到对应表执行删除语句

4. 临时禁用外键检查(应急方案)

若删除操作仍受阻,可临时关闭MySQL外键检查,完成迁移后再恢复:

-- 禁用外键检查
SET FOREIGN_KEY_CHECKS = 0;

-- 执行Magento迁移脚本

-- 恢复外键检查
SET FOREIGN_KEY_CHECKS = 1;

⚠️ 注意:此方法可能导致数据一致性问题,仅用于应急,迁移完成后需验证数据完整性。

验证

删除约束后,重新执行查询确认约束已不存在:

SELECT CONSTRAINT_NAME 
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'MGA7_CAT_CTGR_ENTT_DEC_ATTR_ID_MGA7_EAV_ATTR_ATTR_ID'
AND TABLE_SCHEMA = '你的数据库名称';

确认无结果后,再次执行Magento迁移脚本。

内容的提问来源于stack exchange,提问作者Roly89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:23:26