MySQL添加外键失败报错及跨表id字段引用语法咨询
MySQL外键报错与语法问题解答
问题1:外键约束报错原因
报错ERROR 1822 (HY000) at line 41: Failed to add the foreign key constraint. Missing index for constraint 'organiser_ibfk_1' in the referenced table 'company'确实是因为company表的name字段既不是主键,也没有唯一索引导致的。
MySQL要求外键引用的字段必须是主键或者拥有唯一索引,这样才能快速定位被引用表中的唯一记录。你的company表主键是(address, afm),name字段没有任何唯一性约束或索引,因此organiser表无法基于name字段建立外键关联,触发报错。
解决方法
给company表的name字段添加唯一索引,两种方式任选其一:
- 创建表时直接定义:
create table company( id integer unique not null , name varchar(50) UNIQUE, -- 添加唯一约束 afm varchar(50) , address varchar(50) , sizey integer not null , primary key(address,afm) , foreign key(id) references representative(id) );
- 后期修改表结构:
ALTER TABLE company ADD UNIQUE INDEX idx_company_name (name);
问题2:外键引用语法正确性
你当前的外键语法foreign key(id) references representative(id)是完全正确的。
这里的规则是:foreign key(id)中的id指当前company表的字段,references representative(id)中的第二个id指被引用表representative的主键字段。MySQL会自动识别这种关联关系,完全符合你想要引用representative表id的需求,无需修改语法。
另外,representative表的id已经设为主键,满足外键引用的要求,这个约束是有效的。
内容的提问来源于stack exchange,提问作者ElectronicsBeginner
相关产品推荐
相关产品推荐

