2013-08-20 18 views
1

我有兩個表應該通過關係彼此連接。我在MySQL Workbench中創建了一個模型,但我遇到了一個錯誤。經過一番測試後,我發現有些奇怪的東西。Mysql errno:150創建後,刪除它的域後它的工作原理

我想創建表(其中失敗,錯誤號:150):

CREATE TABLE IF NOT EXISTS `info_paginas` (
    `id` INT(10) NOT NULL , 
    `revision` DECIMAL(10,1) NOT NULL , 
    PRIMARY KEY (`id`, `revision`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `pages_roles` (
    `revision` DECIMAL(10,1) NOT NULL , 
    PRIMARY KEY (`revision`), 
    CONSTRAINT `fk_pages_roles_info_paginas2` 
    FOREIGN KEY (`revision`) 
    REFERENCES `info_paginas` (`revision`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

但這個查詢會OK(我刪除從表info_paginas的PK ID):

CREATE TABLE IF NOT EXISTS `info_paginas` (
    `revision` DECIMAL(10,1) NOT NULL , 
    PRIMARY KEY (`revision`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `pages_roles` (
    `revision` DECIMAL(10,1) NOT NULL , 
    PRIMARY KEY (`revision`), 
    CONSTRAINT `fk_pages_roles_info_paginas2` 
    FOREIGN KEY (`revision`) 
    REFERENCES `info_paginas` (`revision`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 

我沒有得到什麼錯誤,完全相同的引擎相同的表,但只有一個PK少。有人知道這個awnser嗎?

回答

0

您試圖將單列外鍵映射到多列主鍵 - 這是不可能的。只有當您的外鍵具有相同的結構時(即每列的列數和數據類型),您纔可以通過外鍵映射多個列鍵。

或者,你應該定義單列鍵,就像這樣:

alter table info_paginas add key `byRevision` (`revision`); 

,然後運行第二個查詢(在這種情況下,你會得到映射單列關鍵單列鍵)。

+0

好吧,我試過了。它工作感謝:)。我之前嘗試了另一張桌子,並且使用相同的結構很好。但再次感謝:) – Jacob