MySQL:使用两个外键创建表失败,返回“0”;“重复的密钥名称”;错误

MySQL:使用两个外键创建表失败,返回“0”;“重复的密钥名称”;错误,mysql,sql,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

在尝试创建新表时,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)
);
此操作失败,出现错误1061(42000):重复的密钥名“WarehouseMovements”。如果我删除外键约束,这将成功,但我希望确保product1和product2实际上指向某个地方

默认引擎是InnoDB


查询出了什么问题?

尝试区分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名称,而不是表名。见:

上面说

index_name表示外键ID。如果给定,则在 外键的索引是明确定义的。否则,如果 MySQL为外键创建索引,它为 索引名


必须向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)
);

我觉得我应该把表名放在括号之前。。。呵呵。谢谢这很有效。@GiorgosBitzes我在描述语法的地方添加了一个引用。有两种方法可以做到这一点。您还将看到FK_uu名称前缀。
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)
);
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;