回答

收藏

MySQL:使用两个外键创建表失败并显示令人遗憾的重复键名错误

技术问答 技术问答 213 人阅读 | 0 人回复 | 2023-09-14

在尝试创建新表时,MySQL给了我一个我无法解释的错误。
- i3 m4 X& D6 D; g+ QCREATE 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和product实际指向某个地方。; {/ I8 Z, ^% `1 C
默认引擎是InnoDB。- p9 n1 V( h# u' f! x/ f
发现了什么问题?
9 |/ v* A; Y, L3 Y; B                                                                / @: D. A" O) J4 A0 O+ P6 }' G  W+ q1 A
    解决方案:                                                               
( P- U. @3 ?2 d- L% D) j& p                                                                尝试区分FK名称:
& Q, ]' D7 o1 C" _/ p, xCREATE 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));更新
: s3 [' B# I  g那是索引或FK名字,而不是名字。create-table-foreign-
% l* h9 L! R3 C  {  U, b: x2 Mkeys文档:
* f7 I* o) S2 G[CONSTRAINT [symbol]] FOREIGN KEY[index_name] (index_col_name,...)REFERENCES tbl_name (index_col_name,...)哪说
1 i$ Y+ v$ w; C5 i  |& q% hindex_name表示外键ID。如果给定,如果外键索引被显式定义,则此操作将被忽略。否则,如果MySQL为外外键创建索引index_name作为索引名称。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则