我在MYSQL中创建了2个具有父子关系的表。但是,外键关系失败,错误代码为1215.MAIN_ROLE可以有许多SUB_ROLE别名。 SUB_ROLE具有复合PRIMARY键(ID,MAIN_ID,SEQ_NUM)。 MAIN_ROLE表的PRIMARY KEY是SUB_ROLES主键的一部分。 这是表格和我的约束:
create TABLE MAIN_ROLE(
ID int NOT NULL AUTO_INCREMENT,
MAIN_ID int NOT NULL,
ASSIGNED_DATE datetime NULL,
MAIN_ROLE_NM varchar(50) NOT NULL,
PRIMARY KEY(ID,MAIN_ID)
);
create TABLE SUB_ROLE(
ID int NOT NULL,
MAIN_ID int NOT NULL,
SEQ_NUM decimal(15, 0) NOT NULL,
SUB_ROLE_NM varchar(50) NOT NULL,
PRIMARY KEY(ID,MAIN_ID,SEQ_NUM) ,
CONSTRAINT SUB_ROLE_FK REFERENCES MAIN_ROLE(ID,MAIN_ID,SEQ_NUM)
);
有人可以指出我的脚本中的外键有什么问题吗?请帮忙!
答案 0 :(得分:1)
主要问题是你没有关注mysql的foreign key syntax并且你引用了父表中不存在的字段:
SEQ_NUM
字段在主表中不存在,仅在子表中。正确的外键定义如下所示:
CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID)
但是,我并没有真正看到主表中有一个自动增量id字段和一个main_id字段。我会第二眼看看。
答案 1 :(得分:-1)
这有效,CONSTRAINT SUB_ROLE_FK FOREIGN KEY(ID,MAIN_ID)参考MAIN_ROLE(ID,MAIN_ID)