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


そして3番目に、テーブルにはデータがありますか?一部の行がこのFK制約に違反している場合は、そのFKを作成できません。

リンクされた質問


関連する質問

最近の質問