gpt4 book ai didi

MySQL - 添加约束和外键

转载 作者:行者123 更新时间:2023-11-29 10:52:28 24 4
gpt4 key购买 nike

我在为正在创建的数据库建立外键时遇到问题。代码似乎可以运行,但是当我查询表时,它没有返回我认为是外键的内容。

这是我正在处理的内容:

这是我的“制作”表的一小段:

idCrafting    Crafting_Recipe       Item1            ITEM1_ID
1 Copper_Bar Copper_Ore NULL
2 Gold_Bar Gold_Ore NULL

这是我正在使用的项目表:

Item_id     Item_Name
1 Battery_Pack
2 Clay
3 Coal
4 Copper_Ore
5 Copper_Bar

这就是我尝试创建外键的方式。 Crafting 表具有三个项目(由 Item1、Item2 和 Item3 表示)以及 ITEM1_ID、ITEM2_ID 和 ITEM3_ID 列。我想创建外键,用 Items 表中适当的 ITEM_ids 填充 ITEM_ID 列。

ALTER TABLE StardewValley.Crafting
ADD CONSTRAINT Item1_fk_Crafting
FOREIGN KEY (ITEM1_ID) REFERENCES Items (Item_id);

这就是我创建原始制作表的方式:

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 添加到制作表中:

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 表中的主键。

关于MySQL - 添加约束和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43483427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com