7

나는이 테이블을 가지고있다.

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;

아무도 무슨 일이 일어나고 있는지 알지 못해요?


2 답변


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

이것 때문에:

SET NULL 조건을 정의했습니다. 열은 NOT NULL로 정의됩니다.

실행하면 정확한 오류를 볼 수 있습니다.

SHOW ENGINE INNODB STATUS;


  • 더 긴 작품은 내 문제를 해결하지 못한다. 나는 이러한 변경 작업을 시도 할 때 ON DELETE SET NULL과 SET OnUpdate Cascade가 필요하며 동일한 오류 메시지를 표시한다. - user1068478
  • 내 업데이트 답변보기 - rkosegi
  • 사용자가 일부 produto.idproduto를 삭제할 때 sugestao.idsugestao가 null 또는 비어 있어야합니다. 어떻게 설정해야합니까? - user1068478
  • 고마워, 너 많이 도와 줬어. - 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?


셋째, 테이블에 데이터가 있습니까? 일부 행이이 FK 제약 조건을 위반하는 경우 해당 FK를 만들 수 없습니다.

연결된 질문


관련된 질문

최근 질문