删除唯一索引提示‘需用于外键约束’,但未找到对应外键
问题原因及解决方法
报错原因
这个名为unique_style_within_seasons_customer_etc的唯一索引,被其他表的外键约束依赖了。InnoDB引擎规定,外键必须关联到被引用表的主键或唯一索引——如果有其他表通过外键关联到这个唯一索引的字段组合,直接删除它就会触发1553报错。
解决步骤
定位依赖的外键约束
执行以下SQL查询,找出所有依赖该唯一索引的外键:SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'styles' AND REFERENCED_INDEX_NAME = 'unique_style_within_seasons_customer_etc';临时删除依赖的外键
根据上一步查到的结果,逐个删除外键约束。比如查到某表style_related的外键是style_related_style_fk,执行:ALTER TABLE style_related DROP FOREIGN KEY style_related_style_fk;删除原唯一索引
现在可以安全删除目标索引了:ALTER TABLE styles DROP INDEX unique_style_within_seasons_customer_etc;创建包含新字段的唯一索引
添加你需要的字段到唯一约束中,比如新增new_field,执行:ALTER TABLE styles ADD UNIQUE KEY unique_style_within_seasons_customer_etc (`designs_id`,`departments_id`,`seasons_id`,`customers_id`,`category`,`new_field`);重建外键约束
把之前删除的外键重新创建,注意关联到新的唯一索引字段组合:ALTER TABLE style_related ADD FOREIGN KEY style_related_style_fk (`designs_id`,`departments_id`,`seasons_id`,`customers_id`,`category`,`new_field`) REFERENCES styles (`designs_id`,`departments_id`,`seasons_id`,`customers_id`,`category`,`new_field`);
内容的提问来源于stack exchange,提问作者Neil Widdowson
相关产品推荐
相关产品推荐

