我正在尝试使用varchar而不是通常的int
添加外键约束表用户:
CREATE TABLE IF NOT EXISTS `users` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`userFName` varchar(60) NOT NULL,
`userLName` varchar(60) NOT NULL,
`userEmail` varchar(100) NOT NULL,
`userPassword` varchar(50) NOT NULL,
PRIMARY KEY (`userId`)
);
表邮件:
CREATE TABLE IF NOT EXISTS `mail` (
`mailId` int(11) NOT NULL AUTO_INCREMENT,
`sender` varchar(100) NOT NULL,
`receiver` varchar(100) NOT NULL,
`mailSubject` varchar(255) NOT NULL,
`mailContent` varchar(255) NOT NULL,
`mailSendDate` datetime NOT NULL,
CONSTRAINT fk_sender FOREIGN KEY (sender) REFERENCES users(userEmail),
CONSTRAINT fk_receiver FOREIGN KEY (receiver) REFERENCES Users(userEmail),
PRIMARY KEY (`mailId`)
);
我收到错误:外键约束失败
答案 0 :(得分:2)
您应该参考userId
而不是
想象一下,一个user
想要更改电子邮件。然后你就无法改变它,因为存在约束。您必须删除邮件,然后删除用户,然后创建用户和所有电子邮件。
相反,如果您引用userId,则无关紧要。索引大小也较小,因为您要保存整数而不是varchar。
答案 1 :(得分:1)
'userEmail'不是表'用户'的关键字。外键必须始终引用主键或代理键。
此外,您应该在外键和引用的键上创建索引,并声明相应的列具有相似的数据类型。