【发布时间】:2013-03-28 22:40:58
【问题描述】:
我在 SQL (Oracle DB) 中遇到 INSERTING 或 CONSTRAINT 问题。
我创建了表 BOOKS(ID PK、TITLE、YEAR、PRICE、ID_AUTHOR FK、ID_PUBLISHER FK、ID_KIND FK),然后我尝试在该表中插入 18 行。正确添加了 9 行,但在第 10 行出现此错误:
INSERT INTO KSIAZKA
VALUES
(10, 'Visual Basic .NET i platforma .NET', 2000, 70.00, 7, 3, 9)
错误报告:
SQL 错误:ORA-02291:违反完整性约束 (SYSTEM.ID_AUTOR) - 未找到父键
02291. 00000 - “违反完整性约束 (%s.%s) - 未找到父键”
*原因:外键值没有匹配的主键值。
*行动:删除外键或添加匹配的主键。
我尝试插入 10 个相同的行并正确添加了 9 个,但最后一个发生了错误。
我的问题是 - 为什么我只能插入 9 行?我能解决这个问题吗?
顺便说一句。我可以编写查询,让我知道表中的约束是正确的。
我正在使用 Oracle 11g Express Edition 和 SQL Developer。
【问题讨论】:
-
好吧,错误说明了一切:您正在插入一行,其值在引用的表(作者)中没有对应的 PK 值。顺便说一句:您应该不将表创建为
SYSTEM。不要这样做,创建一个普通用户来使用。 -
如果 INSERT (id) 中的第一个值是 10 或更多,则存在错误。如果我在表 BOOKS 中将值 9 或 2 或 5 作为 ID 插入,一切都很好......
-
您可能错误地设置了外键约束。向我们展示桌子的设计
KSIAZKA。 -
我粘贴部分 DLL 代码: CREATE TABLE KSIAZKA ( ID NUMBER NOT NULL , TYTUL VARCHAR2(50 BYTE) , ROK NUMBER , CENA NUMBER(5, 2) , ID_AUTOR NUMBER , ID_WYDAWNICTWO NUMBER , ID_GATUNEK NUMBER , CONSTRAINT KSIAZKA_PK PRIMARY KEY (ID) ENABLE ) ALTER TABLE KSIAZKA ADD CONSTRAINT ID_AUTOR FOREIGN KEY(ID) REFERENCES AUTOR (ID) ENABLE;以及与其他外键(ID_WYDAWNICTWO 和 ID_GATUNEK)相同的代码。