2016-07-30 211 views
0

我正在使用mysql_workbench创建数据库我有products_types,categoriessubcategories表。 category_idsubcategory_id分别是引用categoriessubcategories表的外键。当我forward engineer这种模式从workbenchmysql database on phpMyAdmin它给误差sql中的外键表中的重复键

Can't write; duplicate key in table 'product_types' 

这是错误沿着确切的代码。

Executing SQL script in server 
ERROR: Error 1022: Can't write; duplicate key in table 'product_types' 
SQL Code: 
     -- ----------------------------------------------------- 
     -- Table `argo_project_01_2`.`product_types` 
     -- ----------------------------------------------------- 
     CREATE TABLE IF NOT EXISTS `argo_project_01_2`.`product_types` (
      `id` INT NOT NULL, 
      `category_id` INT NULL, 
      `subcategory_id` INT NULL, 
      `title` VARCHAR(100) NULL, 
      `description` TEXT NULL, 
      `status` INT NULL DEFAULT 0, 
      `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, 
      `modified` TIMESTAMP NULL, 
      PRIMARY KEY (`id`), 
      INDEX `category_id_idx` (`category_id` ASC), 
      INDEX `subcategory_id_idx` (`subcategory_id` ASC), 
      CONSTRAINT `category_id` 
      FOREIGN KEY (`category_id`) 
      REFERENCES `argo_project_01_2`.`categories` (`id`) 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION, 
      CONSTRAINT `subcategory_id` 
      FOREIGN KEY (`subcategory_id`) 
      REFERENCES `argo_project_01_2`.`subcategories` (`id`) 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION) 
     ENGINE = InnoDB 

SQL script execution finished: statements: 9 succeeded, 1 failed 

Fetching back view definitions in final form. 
Nothing to fetch 

查询出了什么问题?

+0

这是你所做的一切吗?在尝试添加数据之前它会爆炸?你还没有一个名为product_types的表? – Jonny

+0

不,我没有'product_types'表,但是有'categories'和'subcategories'存在 –

+0

您是否尝试过重命名与外键不同的约束(两者)? – jonju

回答

0

我认为可以通过将约束名称“category_id”和“subcategory_id”更改为例如“fk_category_id”和“fk_subcategory_id”来解决问题。

编辑: 此外,您可以删除“category_id_idx”和“subcategory_id_idx”索引,因为外键自动生成索引。

+0

“约束名称”的用途是什么? –

+0

@AnujTBE当你创建一个外键约束时,你可以为它指定一个名字。根据列名称将该名称更改为不同的值 –