不能写;表中的重复键

时间:2014-05-01 18:13:25

标签: mysql mysql-workbench

  
     

- 表Project_DBProduct_table

     
CREATE TABLE IF NOT EXISTS  `Project_DB`.`Product_table`
(
    `Product_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `User_id_fk` INT UNSIGNED NOT NULL ,
    `Product_Category_id` INT UNSIGNED NOT NULL ,
    `Product_Name` VARCHAR( 45 ) NOT NULL ,
    `Product_Price` INT UNSIGNED NOT NULL ,
    `Product_details` MEDIUMTEXT NULL ,
    PRIMARY KEY (  `Product_id` ) ,
    INDEX  `User_id_idx` (  `User_id_fk` ASC ) ,
    CONSTRAINT  `User_id` FOREIGN KEY (  `User_id_fk` )
        REFERENCES `Project_DB`.`Registration_table` ( `User_id` )
        ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE = INNODB;

MySQL说:文档

  #p22#1022 - 写不出来;表'product_table'中的重复键

4 个答案:

答案 0 :(得分:8)

数据库架构不能有两个或多个具有相同名称的 FOREIGN KEY 。我将所有FOREIGN KEYS更改为我的DB Schema中的不同名称然后它可以工作......

答案 1 :(得分:2)

我建议您尝试删除

INDEX  `User_id_idx` (  `User_id_fk` ASC ) ,

或者从表定义中删除外键约束,并将其添加到单独的ALTER TABLE语句中。

InnoDB会在添加外键约束时自动创建所需的索引,或者如果已经存在,则使用合适的索引。

我认为错误正在发生,因为InnoDB正在尝试为外键创建索引,而不是使用先前定义的索引。也就是说,当处理CREATE TABLE语句(由OP发布)时,InnoDB正在尝试创建两者User_id_fk上定义的索引,索引外键所需。

这两个索引彼此“重复”。

解决方法是修改CREATE TABLE语句,以避免InnoDB尝试创建“重复”索引。

答案 2 :(得分:1)

我遇到了同样的问题,当我转发设计构建脚本时,MySQLWorkbench正常工作,然后它决定将它的玩具扔出婴儿车。

我通过在phpMyAdmin中删除我的数据库来修复问题,然后再从MySQLWorkbench运行脚本并且它工作正常。我怀疑我改变了导致冲突的事情。

我知道这是一个极端的措施;其他人说,要通过数据库架构并找到重复项。

答案 3 :(得分:0)

通常,您已在另一个也用于外键的表中使用该约束。