2012-03-30 14 views
7

Ho questa tabella:MySQL Error: # 1005 - Impossibile creare tabella (errno: 150) Quando provo creare più di 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 ; 

e questa tabella:

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 ; 

Ho già creato un FK sugestoes.idproduto -> produtos.id funzionante, ma voglio che anche ciascuno degli altri campi faccia riferimento allo produtos.id attraverso il nuovo FK. Eseguire il comando di sotto di quello di ritorno MySQL Error: # 1005 - Impossibile creare la tabella (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; 

Qualcuno ha idea di cosa sta succedendo?

+0

Perché aggiungete che ', ROW_FORMAT = FIXED' nella' ALTER TABLE'? –

risposta

10

Prova questo,

funziona:

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:

non è possibile specificare

ON DELETE SET NULL 

A causa di questo:

Hai definito una condizione SET NULL se alcune delle colonne sono definite come NOT NULL

Si può vedere l'errore esatto in cui si esegue

SHOW ENGINE INNODB STATUS; 
+1

I lavori più lunghi non risolvono il mio problema, Ho bisogno di ON DELETE SET NULL e SET OnUpdate Cascade, quando tento di apportare queste modifiche, dà lo stesso messaggio di errore. – user1068478

+2

Vedere la mia risposta aggiornata – rkosegi

+0

Mi serve quando l'utente ELIMINA alcuni prodotti.idproduto il corrispondente sugestao.idsugestao essere nullo o vuoto, come posso impostarlo? – user1068478

0

Forse la rimozione del 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 
; 

On In secondo luogo, come ti aspetti che lo ON DELETE SET NULL si comporti quando la colonna è definita con NOT NULL?


E in terzo luogo, la tabella contiene dati? Se alcune delle righe violano questo vincolo FK, non puoi creare quell'FK.

Problemi correlati