- 表
Project_DB
。Product_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'中的重复键
答案 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)
通常,您已在另一个也用于外键的表中使用该约束。