繁体   English   中英

MySQL-添加约束和外键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM