MySQL:使用两个外键创建表失败,出现“Duplicate key name”错误

时间:2013-05-22 19:19:15

标签: mysql sql

在尝试创建新表时,MySQL正在给我一个我无法解释的错误。

CREATE TABLE Products (
    id INT NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE WarehouseMovements (
    time        DATETIME           NOT NULL,
    product1    INT                NOT NULL,
    product2    INT                NOT NULL,

    FOREIGN KEY WarehouseMovements(product1) REFERENCES Products(id),
    FOREIGN KEY WarehouseMovements(product2) REFERENCES Products(id)
);

ERROR 1061 (42000): Duplicate key name 'WarehouseMovements'失败。如果我删除外键约束成功,但我想确保product1和product2实际指向某个地方。

默认引擎是InnoDB。

查询有什么问题?

3 个答案:

答案 0 :(得分:6)

尝试使FK名称不同:

CREATE TABLE Products (
    id INT NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE WarehouseMovements (
    time        DATETIME           NOT NULL,
    product1    INT                NOT NULL,
    product2    INT                NOT NULL,

    FOREIGN KEY IX_WarehouseMovements_product1(product1) REFERENCES Products(id),
    FOREIGN KEY IX_WarehouseMovements_product2(product2) REFERENCES Products(id)
);

更新

这是索引或FK名称,而不是表名。见create-table-foreign-keys documentation

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)

其中说

  

index_name表示外键ID。如果给定,则忽略此项   外键的索引是明确定义的。否则,如果   MySQL为外键创建索引,它使用index_name作为   索引名称。

答案 1 :(得分:3)

您必须向FK添加具有不同名称的约束

CREATE TABLE Products (
    id INT NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE WarehouseMovements (
    time DATETIME NOT NULL,
    product1 INT NOT NULL,
    product2 INT NOT NULL,
    CONSTRAINT fk_product_1 FOREIGN KEY (product1) REFERENCES Products (id),
    CONSTRAINT fk_product_2 FOREIGN KEY (product2) REFERENCES Products (id)
);

答案 2 :(得分:0)

ALTER TABLE `cca_orders` 
ADD  CONSTRAINT `item_id` 
FOREIGN KEY (`item_id`) 
REFERENCES `joshi_textile_db`.`cca_items_master`(`id`) 
ON DELETE RESTRICT 
ON UPDATE RESTRICT;