varchar作为外键约束

时间:2016-11-15 14:38:11

标签: mysql database foreign-keys varchar

我正在尝试使用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`)
);

我收到错误:外键约束失败

2 个答案:

答案 0 :(得分:2)

您应该参考userId而不是

想象一下,一个user想要更改电子邮件。然后你就无法改变它,因为存在约束。您必须删除邮件,然后删除用户,然后创建用户和所有电子邮件。

相反,如果您引用userId,则无关紧要。索引大小也较小,因为您要保存整数而不是varchar。

答案 1 :(得分:1)

'userEmail'不是表'用户'的关键字。外键必须始终引用主键或代理键。

此外,您应该在外键和引用的键上创建索引,并声明相应的列具有相似的数据类型。