MYSQL 父子之间的外键关系
MYSQL Foreign Key Relationship between parent Child
我在 MYSQL 中创建了 2 个具有父子关系的 table。但是,外键关系失败,错误代码为 1215。MAIN_ROLE 可以有多个 SUB_ROLE 别名。 SUB_ROLE 有一个复合主键(ID,MAIN_ID,SEQ_NUM)。 MAIN_ROLE table 的主键是 SUB_ROLES 主键的一部分。
这是 table 和我的限制条件:
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)
);
有人能指出我脚本中的外键有什么问题吗?请帮忙!
主要问题是您没有关注 mysql 的 foreign key syntax,并且您引用了 parent table 中不存在的字段:
- 您没有提供来自 child table
的字段列表
SEQ_NUM
字段在主 table 中不存在,仅在子 table. 中存在
正确的外键定义如下所示:
CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID)
但是,我真的不明白在主 table 中有一个自动递增 id 字段和一个 main_id 字段有什么意义。我会再看一遍。
这有效,CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID)
我在 MYSQL 中创建了 2 个具有父子关系的 table。但是,外键关系失败,错误代码为 1215。MAIN_ROLE 可以有多个 SUB_ROLE 别名。 SUB_ROLE 有一个复合主键(ID,MAIN_ID,SEQ_NUM)。 MAIN_ROLE table 的主键是 SUB_ROLES 主键的一部分。 这是 table 和我的限制条件:
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)
);
有人能指出我脚本中的外键有什么问题吗?请帮忙!
主要问题是您没有关注 mysql 的 foreign key syntax,并且您引用了 parent table 中不存在的字段:
- 您没有提供来自 child table 的字段列表
SEQ_NUM
字段在主 table 中不存在,仅在子 table. 中存在
正确的外键定义如下所示:
CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID)
但是,我真的不明白在主 table 中有一个自动递增 id 字段和一个 main_id 字段有什么意义。我会再看一遍。
这有效,CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID)