我正在执行CreateDatabase.sql
和SeedDatabase.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)
;
这显然不是所有的代码,但应该足够了。
答案 0 :(得分:4)
试试这个;)
您忘记在表格定义中添加AUTO_INCREMENT
;
CREATE TABLE `OLTPTEST`.`PersonEmail` (
`PersonEmailId` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
这就是你收到这个错误的原因;