2012-03-30 12 views
7

बनाने मैं इस तालिका है का प्रयास करते हैं:MySQL त्रुटि: # 1005 - तालिका (errno: 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 ; 

मैंने पहले से ही एक एफके sugestoes.idproduto -> produtos.id काम किया है, लेकिन मैं चाहता हूं कि प्रत्येक अन्य फ़ील्ड नए एफके के माध्यम से produtos.id का भी संदर्भ लें। भागो कि वापसी MySQL त्रुटि नीचे इस आदेश: # 1005 - टेबल बनाया नहीं जा सकता (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; 

किसी को भी किसी भी विचार क्या हो रहा है है?

+0

आप 'वैकल्पिक तालिका' में ', ROW_FORMAT = FIXED' क्यों जोड़ते हैं? –

उत्तर

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`) 

अद्यतन:

आप को परिभाषित किया है:

आप

ON DELETE SET NULL 
इस वजह से

निर्दिष्ट नहीं कर सकते एक सेट शून्य हालत स्तंभों में से कुछ यद्यपि के रूप में परिभाषित कर रहे हैं नहीं NULL

जब आप चलाने

SHOW ENGINE INNODB STATUS; 
+1

लंबे समय तक काम मेरी समस्या का समाधान नहीं करता है, मुझे इन परिवर्तनों को करने का प्रयास करते समय, सेट सेट नल और सेट ऑन अपडेट कैस्केड की आवश्यकता है, वही त्रुटि संदेश देता है। – user1068478

+2

मेरा अद्यतन उत्तर – rkosegi

+0

देखें जब उपयोगकर्ता कुछ produto.idproduto को हटा देता है तो संबंधित sugestao.idsugestao शून्य या खाली हो, मैं इसे कैसे सेट कर सकता हूं? – user1068478

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 
; 

पर दूसरा विचार, ON DELETE SET NULL की अपेक्षा कैसे करें जब आपका कॉलम NOT NULL के साथ परिभाषित किया गया हो?


और तीसरा, क्या तालिका में कोई डेटा है? यदि कुछ पंक्तियां इस एफके बाधा का उल्लंघन करती हैं, तो आप उस एफके को नहीं बना सकते हैं।

संबंधित मुद्दे