错误1062,“重复条目”邮箱:a@b.com空表上的“for key”Email“UNIQUE”

2024-10-02 12:22:34 发布

您现在位置:Python中文网/ 问答频道 /正文

标题说明了一切。在

具有以下创建语法的空表,只有数据库中的表。在

CREATE TABLE IF NOT EXISTS `ACME`.`Registration` (
  `ConfirmationNumber` INT NOT NULL AUTO_INCREMENT,
  `FirstName` VARCHAR(45) NOT NULL,
  `LastName` VARCHAR(45) NOT NULL,
  `CompanyName` VARCHAR(100) NOT NULL,
  `Title` VARCHAR(60) NOT NULL,
  `Email` VARCHAR(60) NOT NULL,
  `PhoneNumber` VARCHAR(20) NOT NULL,
  `StreetAddress` VARCHAR(100) NOT NULL,
  `City` VARCHAR(30) NOT NULL,
  `Province` VARCHAR(30) NOT NULL,
  `ZipCode` VARCHAR(10) NOT NULL,
  `Country` VARCHAR(40) NOT NULL,
  PRIMARY KEY (`ConfirmationNumber`),
  UNIQUE INDEX `ConfirmationNumber_UNIQUE` (`ConfirmationNumber` ASC),
  UNIQUE INDEX `Email_UNIQUE` (`Email` ASC),
  UNIQUE INDEX `PhoneNumber_UNIQUE` (`PhoneNumber` ASC))
ENGINE = InnoDB

任何和所有插入都会出现此错误。在

^{pr2}$

我已经尝试过为自动递增的确认号码插入0和不插入0。在

我认为这可能与我安装mysql有关,因为(Mac)system preferences面板显示服务器运行良好,但如果我试图从终端停止/启动,就会出现奇怪的错误。具体来说:

$ mysql.server stop
ERROR! MySQL server PID file could not be found!
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/rover-231-4.rovernet.mtu.edu.pid).

不过,我知道我正在连接到正确的服务器(localhost)和数据库,因为数据确实被插入到注册表中。在

这是一个Python/MySQL/Flask->;HTML/CSS/JS堆栈,所有这些我都是新手。插入Python代码:

    query_string = (
        "INSERT INTO Registration "
        "(FirstName, LastName, CompanyName, Title, Email, PhoneNumber, "
        "StreetAddress, City, Province, ZipCode, Country) "
        "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);")
    cursor.execute(query_string, (first_name, last_name, company, title, email, phone, address, city, state, zipcode, country))

编辑:我还应该补充一点,直到遇到安装问题,不得不重新安装,完全相同的代码运行得非常好。在


Tags: 数据库indexserveremailmysqlnotregistrationfirstname
3条回答

不熟悉HTML/CSS/JS。我的JS和HTML都在调用validate函数,但我没有注意到,因为这是第一次(在迄今为止的大量开发中)调用函数两次会导致错误。感谢mhawke和spencer7593为我指明了正确的方向。在

我有点冒险,但是用IF NOT EXISTS创建表意味着只有在表不存在的情况下才会创建。在

如果表确实已经存在,并且它包含数据,例如列Emaila@b.com的行,则插入操作将失败。在

如果表已经存在,CREATE TABLE命令不会抱怨,它也不会清除现有表中的数据,因此多次运行代码很可能会产生您看到的错误。在

如果你能承受丢失表的代价,那么在启动flask应用程序之前试着放弃它,看看问题是否仍然存在。如果不能丢失数据,请尝试重命名表并重新启动烧瓶应用程序:

mysql> rename table `ACME`.`Registrations` to `ACME`.`blah`;

根据显示的代码部分,我们将猜测email变量包含字符串“邮箱:a@b.com“在执行查询时。在

我建议您尝试查询表

SELECT email FROM Registration WHERE email = 'a@b.com'

只是想看看是否有一行返回。在

如果在表中的该列上定义了UNIQUE约束,则返回的错误是预期的结果,如果该行已经在表中,并且您尝试添加具有相同值的另一行。在

您的代码是否可能在insert语句中循环了两次(或更多次)?在

您确定您的代码正在使用相同的凭据和数据库连接到同一个MySQL服务器吗?在

另一种不太可能的情况是,在正在设置的表上定义了一个BEFORE INSERT触发器新建.电子邮件到那个字符串值。在

另一种可能是表中的损坏,特别是如果这些是MyISAM表。您可以删除该表并重新创建它。在

为了调试这个,我建议您回显/打印查询执行中引用的变量的值,特别是email变量。在

相关问题 更多 >

    热门问题