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),CONSTRAINTfk_1
外键(Owner
,Note_ID
)引用Note
(Dev_ID
,Note_ID
),CONSTRAINTfk_2
外键(Commenter
)引用user
(Dev_ID
))引擎=InnoDB DEFAULT CHARSET=utf8},我得到了“写入或更新时的重复密钥”@user1235872:“重复密钥“意味着您正在为主键插入相同的值两次。这个Answare为我的案例提供了正确的提示。我只使用了一列,但设置了两列作为键。THX和+1从这里开始:D@you不客气。MySql有时会疯狂地向我们显示完整的错误消息。此外,这可能非常狡猾INT(10)
与INT(11)
不同,值的签名也很重要。它们必须完全相同。MySQL在提供垃圾错误消息方面非常出色,这在MariaDB中也没有得到修复。