Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 外键约束的格式不正确?_Mysql - Fatal编程技术网

Mysql 外键约束的格式不正确?

Mysql 外键约束的格式不正确?,mysql,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` (`D

我在创建表时遇到了这个错误:外键约束的格式不正确

{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
}

谢谢你的帮助

这是因为
notes
表的主键是
(Dev\u ID,Note\u ID)
,但您只引用约束中的一列(
Note\u ID


FK约束必须始终由所有PK列组成。

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

还要确保这两个表都是innoDB。

还有一个补充:字段的字符集必须匹配

在引用的表中,我将ascii作为默认字符集:
default charset=ascii
show create table
报告。我试图用
默认字符集=utf
创建引用表,结果得到“外键约束格式不正确”


我在新表(引用表)上将其更改为
DEFAULT CHARSET=ascii
后,成功创建了该表。

出现此问题是因为列

`Note_ID` int(11) UNSIGNED NOT NULL
既不是主要的,也不是唯一的

去吧

`Note_ID` int(11) UNSIGNED NOT NULL UNIQUE

它会起作用。

可能重复的问题不要再问同样的问题。您可以修改上一个问题以添加新信息。或者所有问题都是唯一的。如果他在table
Note
上创建了一个
唯一键(Note\u ID)
,FK将正常工作。我将comment table更改为{create table comment(comment\u ID int UNSIGNED AUTO\u INCREMENT not null,Owner varchar(50)Note\u ID int(11)UNSIGNED not null,Commenter varchar(50)Note\u ID not null,PRIMARY KEY(comment\u ID),CONSTRAINT
fk_1
外键(
Owner
Note_ID
)引用
Note
Dev_ID
Note_ID
),CONSTRAINT
fk_2
外键(
Commenter
)引用
user
Dev_ID
))引擎=InnoDB DEFAULT CHARSET=utf8},我得到了“写入或更新时的重复密钥”@user1235872:“重复密钥“意味着您正在为主键插入相同的值两次。这个Answare为我的案例提供了正确的提示。我只使用了一列,但设置了两列作为键。THX和+1从这里开始:D@you不客气。MySql有时会疯狂地向我们显示完整的错误消息。此外,这可能非常狡猾
INT(10)
INT(11)
不同,值的签名也很重要。它们必须完全相同。MySQL在提供垃圾错误消息方面非常出色,这在MariaDB中也没有得到修复。