12

新しいテーブルを作成しようとしているときに、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 です。

クエリの何が問題になっていますか?

4

3 に答える 3

12

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 のドキュメントを参照してください:

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

どちらが言う

index_name は、外部キー ID を表します。指定された場合、外部キーのインデックスが明示的に定義されている場合、これは無視されます。それ以外の場合、MySQL が外部キーのインデックスを作成する場合、インデックス名に index_name を使用します。

于 2013-05-22T19:27:34.337 に答える