我有一个奇怪的问题,好吧,无论如何,在我的眼中很奇怪。我有一个包含ID,用户名,电子邮件,密码等的数据库...ID 是主键,用户名和电子邮件都分配了 UNIQUE 键。
现在奇怪的是,当我提交时,让我们说以下值;
username: ActionHank
email: ah@ah.com
它被添加。
现在,当我尝试再次添加相同的值时,我收到一个错误,指出它不允许,因为它将是一个重复的条目。这很好用。但是,当我接下来输入以下内容时;
username: ActionHank2
email: ah@ah.com
它只是再次添加它,因此 2 个用户具有相同的电子邮件地址,而我已为电子邮件行提供了 UNIQUE 键。我也可以只更改电子邮件地址而不是用户名,它将被添加。所以不知何故,MySQL 只注册了一个 UNIQUE 键或其他东西,我很困惑。
有人可以在这件事上帮助我吗?谢谢
编辑:我使用phpMyAdmin创建表并将其导出为SQL,这是创建表的外观:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(25) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`date_registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip_address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ;
所以我认为它有一个复合体,正如迈克尔和金克罗所建议的那样。如何在phpMyAdmin中解决这个问题?
您已将username
和email
的组合定义为唯一的。 如果希望每个约束都是唯一的,则需要定义单独的唯一约束:
create table . . .
unique username,
unique email
)
或者,由于这些是单列,因此您可以只执行以下操作:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` varchar(25) NOT NULL UNIQUE,
`email` varchar(255) NOT NULL UNIQUE,
`password` varchar(255) NOT NULL,
`date_registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip_address` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ;
试试这个:
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)