2016-07-30 24 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當你創建一個外鍵約束時,你可以爲它指定一個名字。根據列名稱將該名稱更改爲不同的值 –