我无法为我正在创建的数据库建立外键。代码似乎运行,但是当我查询表时它没有返回我认为的外键。
以下是我的工作内容:
这是我的“制作”表格的一小部分:
TemperatureConverter
以下是我正在使用的Items表:
idCrafting Crafting_Recipe Item1 ITEM1_ID
1 Copper_Bar Copper_Ore NULL
2 Gold_Bar Gold_Ore NULL
这就是我尝试创建外键的方法。 Crafting表有三个Item,由Item1,Item2和Item3表示,以及ITEM1_ID,ITEM2_ID和ITEM3_ID的列。我想创建外键,使用Items表中的相应ITEM_ids填充ITEM_ID列。
Item_id Item_Name
1 Battery_Pack
2 Clay
3 Coal
4 Copper_Ore
5 Copper_Bar
这就是我创建原始Crafting表的方法:
ALTER TABLE StardewValley.Crafting
ADD CONSTRAINT Item1_fk_Crafting
FOREIGN KEY (ITEM1_ID) REFERENCES Items (Item_id);
我有几个其他表使用来自多个表的主键,我无法使其正常工作。我一直在努力让这个只能引用另一个表。
谢谢!
编辑:
我忘了添加我尝试将项目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`));
似乎没有做任何事情。
答案 0 :(得分:1)
您可以在添加FOREIGN KEY
约束之前尝试更新值,例如:
UPDATE Crafting
SET ITEM1_ID = (SELECT Item_id FROM items WHERE Item_id = Item1 LIMIT 1);
这将确保所有值都指向父表中的正确键。另外,我猜Item_id
已经是Items表中的主键。