MySQL:错误代码:1062。键 'PRIMARY' 的重复条目“0”

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

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

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

SeedDatabase.sql中,我DELETE从每个table的所有数据中重新得到INSERT的数据。这打破了我的两个 INSERT 语句。

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

这个错误对我来说没有意义,因为我的 UNIQUE 约束基于两个不同于其他 table 的 ID (UNIQUE INDEX 'PersonId_EmailId_UNIQUE' ('PersonId', 'EmailId' ASC))。我还有其他 table 以相同的方式创建并且不会中断(具有有效的重复 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)
    ;

这显然不是全部代码,但应该足够了。

试试这个 ;)

您忘记在 table 定义中添加 AUTO_INCREMENT

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

这就是您收到此错误的原因;