15

テーブルの作成時に次のエラーが発生しました: 外部キー制約の形式が正しくありません???

{create table comment(
Comment_ID int UNSIGNED AUTO_INCREMENT not null,
User_1 varchar(50) not null,
Note_ID int(11) UNSIGNED not null,
PRIMARY key(Comment_ID),
  CONSTRAINT `fk_1` FOREIGN KEY (`User_1`) REFERENCES `user` (`Dev_ID`),
  CONSTRAINT `fk_2` FOREIGN KEY (`User_2`) REFERENCES `user` (`Dev_ID`),
  CONSTRAINT `fk_3` FOREIGN KEY (`Note_ID`) REFERENCES `note`(`Note_ID`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
}

fk_3
このメモ テーブルを削除しても問題ありません

{ 
CREATE TABLE `note` (
 `Dev_ID` varchar(50) NOT NULL,
  `Note_ID` int(11) UNSIGNED NOT NULL,
  `Title` varchar(200) NOT NULL,
  `Time` datetime NOT NULL,
  `Mood` int(11) NOT NULL,
  `Body` varchar(3000) NOT NULL,
  `Visible` tinyint(1) NOT NULL DEFAULT '1',
  `Share` tinyint(1) NOT NULL DEFAULT '0',
  `Update` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Dev_ID`,`Note_ID`),
  CONSTRAINT `fk_note_user` FOREIGN KEY (`Dev_ID`) REFERENCES `user` (`Dev_ID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
}

手伝ってくれてありがとう!

4

6 に答える 6

24

これは、notesテーブルの主キーが、制約(Dev_ID,Note_ID)でこれらの列 ( ) の 1 つだけを参照しているためです。Note_ID

FK 制約は、常にすべての PK 列で構成されている必要があります。

于 2012-04-09T18:55:21.437 に答える
3

与えられた回答に加えて、フィールド タイプが一致しない場合にもこのエラーが発生します。たとえば、varcharフィールドとフィールドの間に外部キー制約を作成しようとした場合int

于 2015-02-27T14:25:39.707 に答える