MySQL错误:#1005 - 无法创建表(错误:150)当我试图创造超过1 FK

问题描述:

我有这个表: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

试试这个,

它的工作原理:

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

也许去除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。