MySQL添加外键报错ERROR 1826重复外键约束名如何解决?
报错根源
ERROR 1826: Duplicate foreign key constraint name报错与主键字段是否可作为多表外键无关,核心触发逻辑为:
MySQL的外键约束名称是数据库全局唯一,而非单表维度唯一。你两次添加外键时使用了重复的约束命名,比如给CREDIT_CARD_DETAILS表加profile_id外键时用了fk_profile_id作为约束名,给TICKET_INFO表加同字段外键时复用了相同名称,就会触发重复校验报错,flight_id字段的报错逻辑完全一致。
解决方案
- 自定义外键约束命名,遵循
fk_当前表名_关联表名_关联字段的命名规则,保证全局唯一,示例SQL如下:
给CREDIT_CARD_DETAILS表加外键:
给TICKET_INFO表加同字段外键,更换约束名即可:ALTER TABLE CREDIT_CARD_DETAILS ADD CONSTRAINT `fk_credit_card_passenger_profile_id` FOREIGN KEY (`profile_id`) REFERENCES PASSENGER_PROFILE(`profile_id`);ALTER TABLE TICKET_INFO ADD CONSTRAINT `fk_ticket_info_passenger_profile_id` FOREIGN KEY (`profile_id`) REFERENCES PASSENGER_PROFILE(`profile_id`); - 若使用MySQL Workbench可视化操作添加外键,不要使用系统自动生成的默认约束名,手动在「Constraint Name」输入栏修改为符合上述规则的唯一名称即可。
- 如需排查现有重复约束名,可执行以下SQL查询当前库所有外键约束:
SELECT CONSTRAINT_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = '替换为你的实际数据库名' AND REFERENCED_TABLE_NAME IS NOT NULL;
内容的提问来源于stack exchange,提问作者user10276750
相关产品推荐
相关产品推荐

