我有一个数据库项目,我正在为一个学校项目工作,我的一个特定表是除主键的一列之外的所有外键。当我尝试INSERT INTO
任何类型的值时,我收到错误消息:
--Insert failed for rows 1 through 50
--ORA-02291: integrity constraint (112ZACCARO.SYS_C0013505) violated - parent key not found
该约束适用于Helmet
列。我需要找出如何引用PArmorOptions
的主键。我确实以下列方式建立了所有主键和外键,我不会显示PCharacterBuilds
的主键,因为我认为没有必要。
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (ClassName) REFERENCES PClasses(ClassName);
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Helmet) REFERENCES PArmorOptions(OptName);
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Chestpiece) REFERENCES PArmorOptions(OptName);
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Gauntlets) REFERENCES PArmorOptions(OptName);
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (LegArmor) REFERENCES PArmorOptions(OptName);
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Boots) REFERENCES PArmorOptions(OptName);
和PArmorOptions
CREATE TABLE PArmorOptions
(
OptName NVARCHAR2(50),
Rarity NVARCHAR2(20),
ArmorMaterial NVARCHAR2(20)
);
ALTER TABLE PArmorOptions ADD PRIMARY KEY (OptName);
ALTER TABLE PArmorOptions ADD FOREIGN KEY (MaterialID) REFERENCES PArmorType(MaterialID);
答案 0 :(得分:2)
PCharacterBuilds
表的INSERT语句可能如下所示:
insert into PCharacterBuilds (ClassName,Helmet,Chestpiece,Gauntlets,LegArmor,Boots)
values ('RANGER', 'MORION', 'CHAINMAIL', 'LEATHER', 'LEATHER', 'HOBNAILED');
外键的目的是确保子表中的记录仅包含允许的值。 PArmorOptions
上的主键是OptName
。因此,要使上述陈述有效,您需要PArmorOptions
中的五条记录,其中一条记录分别针对' MORION',' CHAINMAIL' LEATHER',& #39;皮革'并且' HOBNAILED'。同样,您必须在PClasses
中有ClassName
=' RANGER'。
请注意,因为这些是字符串键,因此插入的值必须与完全匹配:case,拼写,空格等必须匹配。您将获得ORA-02291
,因为父表中不存在这些必要的记录。记录根本不存在,或者值不同。