父子

时间:2017-02-15 01:58:32

标签: mysql foreign-key-relationship

我在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)
    );

有人可以指出我的脚本中的外键有什么问题吗?请帮忙!

2 个答案:

答案 0 :(得分:1)

主要问题是你没有关注mysql的foreign key syntax并且你引用了父表中不存在的字段:

  1. 您不提供子表中的字段列表
  2. SEQ_NUM字段在主表中不存在,仅在子表中。
  3. 正确的外键定义如下所示:

    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)