外键约束是否错误形成?

use*_*872 11 mysql

创建表时我得到了这个错误:外键约束形成错误???

{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;
}
Run Code Online (Sandbox Code Playgroud)

当我删除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
}
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

a_h*_*ame 23

那是因为notes表的主键是,(Dev_ID,Note_ID)但您只是Note_ID在约束中引用其中一列().

FK约束必须始终包含所有PK列.

  • 或者所有独特.如果他在表'Note`上创建一个`UNIQUE KEY(Note_ID)`,FK就能正常工作. (4认同)

PHP*_*Pst 9

还要确保两个表都是innoDB.


Ali*_*gji 7

除了已给出的答案之外,如果字段类型不匹配,您还会收到此错误。例如,如果您尝试在varchar字段与int字段之间创建外键约束。

  • 此外,这可能非常鬼祟!`INT(10)` 与 `INT(11)` 不同,并且值的签名也很重要。它们需要相同。MySQL 在给出垃圾错误消息方面非常出色,而这在 MariaDB 中也没有得到修复。 (3认同)
  • 这发生在我身上,因为目标列是“int(11) unsigned”,而源列只是“int(11)” (2认同)