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作为索引名称。 |
|
|
|
|
|