2016-02-14 96 views
0

我有兩個表PlanePlaneType在mysql中添加外鍵和引用鍵時遇到錯誤

 CREATE TABLE Plane 
(
    ID INT, 
    Maker VARCHAR(30), 
    Model VARCHAR(30), 
    LastMaint VARCHAR(30), 
    LastMaintA VARCHAR(3), 

    PRIMARY KEY (ID) 
) ENGINE = INNODB; 

CREATE TABLE PlaneType (
    Maker VARCHAR(30), 
    Model VARCHAR(30), 

    PRIMARY KEY (Maker, Model) 
    ) ENGINE = INNODB; 

之後我插入這兩個表我想補充的外商和主鍵:

ALTER TABLE Plane ADD FOREIGN KEY (Maker) REFERENCES PlaneType(Maker); 
ALTER TABLE Plane ADD FOREIGN KEY (Model) REFERENCES PlaneType(Model); 

第一ALTER作品完美,但第二個給我的錯誤:

 ERROR 1005 (HY000): Can't create table '----.frm' (errno: 150) 

我不知道爲什麼第一個ALTER完美的作品,第二個沒有。兩者都是對主鍵的引用,這是我能想到的唯一問題。我是一個mysql noob,所以它可能是非常明顯的東西。

任何幫助表示讚賞,在此先感謝。

+0

在標記爲dupe之前即將回答:如果您將'PlaneType'的PK稱爲'AUTO_INCREMENT INT'列,例如'plane_type_id',則可以避免使用'maker'和'model'。然後'Plane'將有一個'plane_type_id',可用於'PlaneType'上的'JOIN'來拉制造商和模型。 – Terminus

+0

感謝您的建議,我也會試一試。 – Kenshin

回答

1

試試這個SHOW ENGINE INNODB STATUS並尋找LATEST FOREIGN KEY ERROR以獲得具體的錯誤。

但我確實認爲這是一個索引問題。您的主鍵由Maker AND Model組成。在Model上創建一個索引,並創建FK。

+0

非常感謝!這完全回答了我的問題。 – Kenshin

+0

@Kenshin雖然這只是回答問題並解決了錯誤。請注意,稍後您可能會遇到問題,因爲複合PK應該具有複合FK(因爲FK應該具有與PK相同的列數),請閱讀以下內容:http://stackoverflow.com/questions/16323676 /引用-A-複合主鍵。 –