나는이 테이블을 가지고있다.
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
작동하지만, 나는 다른 분야의 각각에 대해서도 언급하고 싶다.produtos.id
새로운 FK를 통해.
아래 명령을 실행하면 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;
아무도 무슨 일이 일어나고 있는지 알지 못해요?
이 시도,
작동 :
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
이것 때문에:
SET NULL 조건을 정의했습니다. 열은 NOT NULL로 정의됩니다.
실행하면 정확한 오류를 볼 수 있습니다.
SHOW ENGINE INNODB STATUS;
아마도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
?
셋째, 테이블에 데이터가 있습니까? 일부 행이이 FK 제약 조건을 위반하는 경우 해당 FK를 만들 수 없습니다.
, ROW_FORMAT = FIXED
~ 안에ALTER TABLE
? - yper-crazyhat-cubeᵀᴹ