2017-02-15 120 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