2017-02-15 108 views
0

我已经在MYSQL中创建了具有父子关系的2个表。但是,外键关系失败,错误代码为1215.MAIN_ROLE可以包含许多SUB_ROLE别名。 SUB_ROLE有一个复合PRIMARY键(ID,MAIN_ID,SEQ_NUM)。 MAIN_ROLE表的PRIMARY KEY是SUB_ROLES主键的一部分。 下面是桌子,我的限制:MYSQL外键亲子之间的关系

 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

你会错过在表main_role –

回答

0

这个工作,约束SUB_ROLE_FK外键(ID,MAIN_ID)参考文献MAIN_ROLE(ID,MAIN_ID)

1

的主要问题是,你没有关注MySQL的foreign key syntax并在不存在父表你引用一个字段:

  1. 你不从子表
  2. 提供字段列表
  3. SEQ_NUM字段不存在于主表中,只在子表中存在。

正确的外键定义会像下面这样:

CONSTRAINT SUB_ROLE_FK FOREIGN KEY (ID,MAIN_ID) REFERENCES MAIN_ROLE(ID,MAIN_ID) 

不过,我实在不明白ehat是其主表中的自动递增ID字段和main_id场点。我会看第二个。

+0

的seq_role专栏中,我并没有设计表遗憾的是,我没有控制它。 – BreenDeen

+0

不适用于MySQL – BreenDeen

+0

请详细了解您尝试过的内容以及遇到的错误消息/意外行为。更不用说我在MySQL的相关手册页中链接了这一事实,因此如果在我建议的实际代码中存在一些小的语法/拼写错误,那么您可以自行解决它们。 – Shadow