MySQL:错误代码:1062。键 'PRIMARY' 的重复条目“0”
MySQL: Error Code: 1062. Duplicate entry '0' for key 'PRIMARY'
我正在执行 CreateDatabase.sql
和 SeedDatabase.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,
这就是您收到此错误的原因;
我正在执行 CreateDatabase.sql
和 SeedDatabase.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,
这就是您收到此错误的原因;