【问题标题】:Insert/constraints in SQL (Oracle)SQL (Oracle) 中的插入/约束
【发布时间】: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)相同的代码。

标签: sql oracle11g


【解决方案1】:

问题来了:

 ADD CONSTRAINT ID_AUTOR FOREIGN KEY(ID) REFERENCES AUTOR (ID)

您的外键应该是 id_auto。像这样:

 ADD CONSTRAINT ID_AUTOR FOREIGN KEY(ID_AUTOR) REFERENCES AUTOR (ID)

问候!

【讨论】:

  • 谢谢!我是在 SQL Developer 中通过向导创建表的,但我不知道表创建错误(外键)出了什么问题。太感谢了! :)
【解决方案2】:

尝试使用显式的 sintax(带有列名):

INSERT INTO KSIAZKA (column_name1,column_name2,column_name3...)
VALUES 
(10, 'Visual Basic .NET i platforma .NET', 2000, 70.00, 7, 3, 9)

我认为列顺序不对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多