我得到这个错误时创建表:一个月一个月
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
多谢帮忙!
6条答案
按热度按时间z9smfwbn1#
这是因为
note
表的主键是(Dev_ID,Note_ID)
,但您在约束中只引用了其中一列(Note_ID
)。FK约束必须始终由所有PK列组成。
yuvru6vn2#
还要确保两个表都是inoDB。
piok6c0g3#
除了已给出的答案之外,如果字段类型不匹配,也会出现此错误。例如,如果试图在
varchar
字段和int
字段之间创建外键约束。mrfwxfqh4#
出现此问题的原因是
既不是主要的也不是唯一的。
快做吧
它会起作用的。
cnh2zyt35#
还有一点:字段的字符集必须匹配。
在引用的表中,我使用ascii作为默认字符集:
show create table
报告了DEFAULT CHARSET=ascii
。我尝试使用DEFAULT CHARSET=utf
创建引用表,但收到“外键约束格式不正确”。在新表(引用表)上将其更改为
DEFAULT CHARSET=ascii
之后,它就成功创建了。b4lqfgs46#
确保两个字段上的排序规则相同。当一个是
latin-general-ci
,另一个是utf8_unicode_ci
时,我遇到了同样的问题。不确定为什么一个表上的排序规则发生了变化,但修复此问题解决了问题。