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

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

username: ActionHank
email: ah@ah.com


它被添加。

现在,当我尝试再次添加相同的值时,我收到一个错误,因为它是重复条目,所以不允许这样做。这很好。
但是,当我把下一个放在下面时;

username: ActionHank2
email: ah@ah.com


它只是再次添加它,所以当我为电子邮件行指定UNIQUE键时,2个用户具有相同的电子邮件地址。我也可以只更改电子邮件地址而不是用户名,它将被添加。因此,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 ;


因此,我认为它具有Michael和Kingkero建议的组合。如何在phpMyAdmin中解决此问题?

最佳答案

您已将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 ;

关于php - MySQL:唯一键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27594428/

10-11 22:37
查看更多