[英]MySQL - Adding a Constraint and Foreign Key
我在为要创建的数据库建立外键时遇到麻烦。 该代码似乎在运行,但是当我查询表时,它没有返回我认为是外键的内容。
这是我正在使用的:
这是我的“制作”表的一小段:
idCrafting Crafting_Recipe Item1 ITEM1_ID
1 Copper_Bar Copper_Ore NULL
2 Gold_Bar Gold_Ore NULL
这是我正在使用的Items表:
Item_id Item_Name
1 Battery_Pack
2 Clay
3 Coal
4 Copper_Ore
5 Copper_Bar
这就是我试图创建外键的方式。 制作表具有三个由Item1,Item2和Item3表示的项目,以及ITEM1_ID,ITEM2_ID和ITEM3_ID的列。 我想创建外键,以用Items表中的相应ITEM_id填充ITEM_ID列。
ALTER TABLE StardewValley.Crafting
ADD CONSTRAINT Item1_fk_Crafting
FOREIGN KEY (ITEM1_ID) REFERENCES Items (Item_id);
这就是我创建原始Crafting表的方式:
CREATE TABLE IF NOT EXISTS StardewValley.Crafting (
idCrafting INT NOT NULL AUTO_INCREMENT,
Crafting_Recipe VARCHAR(45) NOT NULL,
Item1 VARCHAR(45) NULL,
Item2 VARCHAR(45) NULL,
Item3 VARCHAR(45) NULL,
PRIMARY KEY (`idCrafting`));
我还有其他几个表,这些表使用来自多个表的主键,但是我无法使其正常工作。 我一直在努力使这个仅引用另一个表的表起作用。
谢谢!
编辑:
我忘了补充说,我也尝试将商品ID添加到Crafting表中:
ALTER TABLE StardewValley.Crafting ADD ITEM1_ID INT;
ALTER TABLE StardewValley.Crafting ADD ITEM2_ID INT;
ALTER TABLE StardewValley.Crafting ADD ITEM3_ID INT;
ALTER TABLE StardewValley.Crafting ADD Item_id INT;
似乎什么也没做。
您能否在添加FOREIGN KEY
约束之前尝试更新值,例如:
UPDATE Crafting
SET ITEM1_ID = (SELECT Item_id FROM items WHERE Item_id = Item1 LIMIT 1);
这将确保所有值都指向父表中的正确键。 另外,我猜Item_id
已经是Items表中的主键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.