MySQL:错误代码:1062。密钥'PRIMARY'重复输入'0'

时间:2016-04-13 08:52:39

标签: mysql unique-constraint unique-index

我正在执行CreateDatabase.sqlSeedDatabase.sql个脚本。

CreateDatabase.sql中,我完全DROP数据库并重新CREATE它。这很好。

SeedDatabase.sql中,我DELETE来自每个表的所有数据并重新INSERT数据。这打破了我的两个INSERT语句。

Error Code: 1062. Duplicate entry '0' for key 'PRIMARY'

此错误对我没有意义,因为我的UNIQUE约束基于与其他表(UNIQUE INDEX 'PersonId_EmailId_UNIQUE' ('PersonId', 'EmailId' ASC))的两个不同的ID。我还有其他以相同方式创建的表,并且不会中断(使用有效的重复ID)。

非常感谢任何帮助。提前谢谢!

MySQL:CreateDatabase.sql

CREATE TABLE `OLTPTEST`.`PersonEmail` (
  `PersonEmailId` INT(11) UNSIGNED NOT NULL,
  `PersonId` INT(11) UNSIGNED NOT NULL,
  `EmailId` INT(11) UNSIGNED NOT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT NOW(),
  PRIMARY KEY (`PersonEmailId`),
  UNIQUE INDEX `PersonEmailId_UNIQUE` (`PersonEmailId` ASC),
  INDEX `PersonId_INDEX` (`PersonId` ASC),
  INDEX `EmailId_INDEX` (`EmailId` ASC),
  UNIQUE INDEX `PersonId_EmailId_UNIQUE` (`PersonId`, `EmailId` ASC),
  CONSTRAINT `PersonEmail_PersonId_FOREIGN`
    FOREIGN KEY (`PersonId`)
    REFERENCES `OLTPTEST`.`Person` (`PersonId`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `PersonEmail_EmailId_FOREIGN`
    FOREIGN KEY (`EmailId`)
    REFERENCES `OLTPTEST`.`Email` (`EmailId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

MySQL:SeedDatabase.sql

SET SQL_SAFE_UPDATES = 0;
DELETE FROM `OLTPTEST`.`PersonEmail`;

ALTER TABLE `OLTPTEST`.`PersonEmail` AUTO_INCREMENT = 1;

INSERT INTO `OLTPTEST`.`PersonEmail` (PersonId, EmailId)
VALUES
    (1, 1)
    ,(1, 2)
    ,(2, 3)
    ,(3, 4)
    ,(4, 5)
    ;

这显然不是所有的代码,但应该足够了。

1 个答案:

答案 0 :(得分:4)

试试这个;)

您忘记在表格定义中添加AUTO_INCREMENT;

CREATE TABLE `OLTPTEST`.`PersonEmail` (
  `PersonEmailId` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

这就是你收到这个错误的原因;