2012-03-30 4 views
7

Ich habe diese Tabelle:MySQL Fehler: # 1005 - kann nicht erstellt werden Tisch (errno: 150) Wenn ich versuche, erstellen mehr als 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 ; 

und diese Tabelle:

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 ; 

Ich habe bereits ein fk sugestoes.idproduto -> produtos.id erstellt, aber ich möchte, dass jedes der anderen Felder auch auf die produtos.id durch neue FK verweisen. Führen Sie diesen Befehl unter dieser Rückkehr MySQL Fehler: # 1005 - kann nicht erstellt werden Tisch (errno: 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; 

Hat jemand eine Ahnung, was los ist?

+0

Warum fügen Sie das ', ROW_FORMAT = FIXED' in' ALTER TABLE' hinzu? –

Antwort

10

Try this,

es funktioniert:

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:

Sie nicht

ON DELETE SET NULL 

Aus diesem Grund angeben:

Sie definiert haben eine SET NULL Bedingung obwohl einige der Spalten als NOT NULL definiert

Sie genaue Fehler sehen können, wenn Sie

SHOW ENGINE INNODB STATUS; 
+1

Längere Arbeiten löst nicht mein Problem, Ich brauche ON DELETE SET NULL und SET OnUpdate Cascade, wenn ich versuche, diese Änderungen vorzunehmen, gibt die gleiche Fehlermeldung. – user1068478

+2

Siehe meine aktualisierte Antwort – rkosegi

+0

Ich brauche, wenn der Benutzer DELETE einige produto.idproduto die entsprechenden suggestao.idsugestao Null oder leer sein, wie kann ich es einstellen? – user1068478

0

Vielleicht Entfernen der ROW_FORMAT = FIXED laufen:

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 
; 

On zweiter Gedanke, wie erwarten Sie, dass sich das ON DELETE SET NULL verhält, wenn Ihre Spalte mit NOT NULL definiert ist?


Und drittens, hat die Tabelle irgendwelche Daten drin? Wenn einige der Zeilen diese FK-Einschränkung verletzen, können Sie diesen FK nicht erstellen.

Verwandte Themen