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;
没有人有任何想法是怎么回事?
试试这个,
它的工作原理:
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;
长时间的工作没有解决我的问题, 我需要ON DELETE SET NULL和SET OnUpdate Cascade,当我尝试进行这些更改时,会给出相同的错误消息。 – user1068478 2012-03-30 06:29:20
查看我的更新回答 – rkosegi 2012-03-30 06:42:45
我需要当用户删除一些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。
为什么要在'ALTER TABLE'中添加',ROW_FORMAT = FIXED'? – 2012-03-30 06:43:02