2012-03-30 48 views
7

我有這個表:MySQL錯誤:#1005 - 無法創建表(錯誤:150)當我試圖創造超過1 FK

CREATE TABLE IF NOT EXISTS `produtos` (
    `id` int(11) NOT NULL auto_increment, 
    `idcatprodutos` int(11) NOT NULL, 
    `idcategoria` int(11) NOT NULL, 
    `idmarca` int(11) NOT NULL, 
    `nome` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK_produtos_2` (`idcatprodutos`), 
    KEY `FK_produtos_3` (`idmarca`), 
    KEY `FK_produtos_4` (`idcategoria`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=39 ; 

與此表:

CREATE TABLE IF NOT EXISTS `sugestoes` (
    `id` int(11) NOT NULL auto_increment, 
    `idproduto` int(11) NOT NULL, 
    `idsugestao1` int(11) NOT NULL, 
    `idsugestao2` int(11) NOT NULL, 
    `idsugestao3` int(11) NOT NULL, 
    `idsugestao4` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK_sugestoes_prod` (`idproduto`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED AUTO_INCREMENT=9 ; 

我已經創建了一個fk sugestoes.idproduto -> produtos.id工作,但我希望每個其他領域也通過新的FK參考produtos.id。 運行低於回報MySQL錯誤此命令:#1005 - 無法創建表(錯誤:150):

ALTER TABLE `infantile`.`sugestoes` ADD CONSTRAINT `FK_sugestoes_2` FOREIGN KEY `FK_sugestoes_2` (`idsugestao1`) 
    REFERENCES `produtos` (`id`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE 
, ROW_FORMAT = FIXED; 

沒有人有任何想法是怎麼回事?

+0

爲什麼要在'ALTER TABLE'中添加',ROW_FORMAT = FIXED'? – 2012-03-30 06:43:02

回答

10

試試這個,

它的工作原理:

ALTER TABLE `sugestoes` 
ADD CONSTRAINT `FK_idproduto_produtos_1` FOREIGN KEY (`idproduto`) REFERENCES `produtos` (`id`), 
ADD CONSTRAINT `FK_sugestoes_produtos_2` FOREIGN KEY (`idsugestao1`) REFERENCES `produtos` (`id`), 
ADD CONSTRAINT `FK_sugestoes_produtos_3` FOREIGN KEY (`idsugestao2`) REFERENCES `produtos` (`id`), 
ADD CONSTRAINT `FK_sugestoes_produtos_4` FOREIGN KEY (`idsugestao3`) REFERENCES `produtos` (`id`), 
ADD CONSTRAINT `FK_sugestoes_produtos_5` FOREIGN KEY (`idsugestao4`) REFERENCES `produtos` (`id`) 

UPDATE:

不能指定

ON DELETE SET NULL 

正因爲如此:

您已經定義雖然一些 列的SET NULL條件被定義爲NOT NULL

你可以看到確切的錯誤,當您運行

SHOW ENGINE INNODB STATUS; 
+1

長時間的工作沒有解決我的問題, 我需要ON DELETE SET NULL和SET OnUpdate Cascade,當我嘗試進行這些更改時,會給出相同的錯誤消息。 – user1068478 2012-03-30 06:29:20

+2

查看我的更新回答 – rkosegi 2012-03-30 06:42:45

+0

我需要當用戶刪除一些produto.idproduto時,相應的sugestao.idsugestao爲空或空,我該如何設置? – user1068478 2012-03-30 07:24:43

0

也許去除ROW_FORMAT = FIXED

ALTER TABLE `infantile`.`sugestoes` 
    ADD CONSTRAINT `FK_sugestoes_2` 
    FOREIGN KEY `FK_sugestoes_2` (`idsugestao1`) 
     REFERENCES `produtos` (`id`) 
     ON DELETE SET NULL 
     ON UPDATE CASCADE 
; 

在第二個想法,當你的列被定義爲NOT NULL時,你如何期望ON DELETE SET NULL行爲?


第三,表中是否有任何數據?如果某些行違反了這個FK約束,那麼你不能創建該FK。

相關問題