MySQL - 添加约束和外键

时间:2017-04-18 22:46:38

标签: mysql database foreign-keys foreign-key-relationship

我无法为我正在创建的数据库建立外键。代码似乎运行,但是当我查询表时它没有返回我认为的外键。

以下是我的工作内容:

这是我的“制作”表格的一小部分:

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`));

似乎没有做任何事情。

1 个答案:

答案 0 :(得分:1)

您可以在添加FOREIGN KEY约束之前尝试更新值,例如:

UPDATE Crafting
SET ITEM1_ID = (SELECT Item_id FROM items WHERE Item_id = Item1 LIMIT 1);

这将确保所有值都指向父表中的正确键。另外,我猜Item_id已经是Items表中的主键。