【发布时间】:2019-09-08 07:20:39
【问题描述】:
我在对数据库进行正向工程时收到以下错误:
错误:错误 1022:无法写入;表“食谱”中的重复键
有什么建议吗?
我在 stackoverflow 中研究了这个问题,我想如果我从其他表(其中一些具有相同的外键名称)中更改了一些外键的名称,就不会出现错误。相同的错误代码仍然存在。我的数据库的架构只显示了八个表中的两个。
在服务器中执行 SQL 脚本
ERROR: Error 1022: Can't write; duplicate key in table 'recipes'
SQL Code:
-- -----------------------------------------------------
-- Table `our_recipes`.`recipes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `our_recipes`.`recipes` (
`recipe_id` INT NOT NULL,
`chef_id` INT NOT NULL,
`recipe_name` CHAR(25) NULL,
`description` LONGTEXT NULL,
`min_prep` VARCHAR(25) NULL,
`total_time` INT NULL,
`servings_min` VARCHAR(25) NULL,
`servings_max` VARCHAR(45) NULL,
`directions` VARCHAR(45) NULL,
`website_id1` VARCHAR(25) NOT NULL,
PRIMARY KEY (`recipe_id`),
INDEX `chef_id_idx` (`chef_id` ASC),
INDEX `website_id_idx` (`website_id1` ASC),
UNIQUE INDEX `recipe_id_UNIQUE` (`recipe_id` ASC),
CONSTRAINT `chef_id`
FOREIGN KEY (`chef_id`)
REFERENCES `our_recipes`.`chef` (`chef_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `website_id`
FOREIGN KEY (`website_id1`)
REFERENCES `our_recipes`.`website` (`website_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
我希望数据库模式中有八个表。我也期望没有错误。
【问题讨论】:
-
在
recipe_id上不需要UNIQUE INDEX,因为recipe_id是PRIMARY。PRIMARY本身将保证每个recipe_id都是唯一的。另一种可能性是在另一个表上找到您的约束名称。确保约束chef_id和website_id没有在另一个表上使用。
标签: mysql database mysql-workbench