MySQL:UNIQUE键

时间:2014-12-21 22:27:34

标签: php mysql

我有一个奇怪的问题,好吧,无论如何我的眼睛都很奇怪。 我有一个包含ID,用户名,电子邮件,密码等的数据库...... ID是主键,用户名和电子邮件都分配了UNIQUE键。

现在奇怪的是,当我提交时,我们可以说出以下数值;

username: ActionHank
email: ah@ah.com

它被添加。

现在,当我尝试再次添加相同的值时,我收到一个错误,它是不允许的,因为它将是一个重复的条目。这非常有效。 但是,当我接下来接下来的时候;

username: ActionHank2
email: ah@ah.com

它只是再次添加它,所以2个用户拥有相同的电子邮件地址,而我给了电子邮件行UNIQUE键。我也可以只更改电子邮件地址而不是用户名,它将被添加。所以不知何故MySQL只注册了一个独特的键或其他东西,我很困惑。

有人可以帮我解决这个问题吗?感谢

编辑:我已经使用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 ;

所以我认为它有一个像Michael和Kingkero建议的复合材料。我怎样才能在phpMyAdmin中解决这个问题?

2 个答案:

答案 0 :(得分:3)

您已将usernameemail的组合定义为唯一。如果您希望每个都是唯一的,则需要定义单独的唯一约束:

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 ;

答案 1 :(得分:0)

试试这个:

PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)