12

我正在创建一个试图从外键访问值的数据库。我创建了两个下表

CREATE TABLE Component(
    ComponentID varchar2(9) PRIMARY KEY
    , TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID)
)

INSERT INTO Component VALUES(192359823,785404309)
INSERT INTO Component VALUES(192359347,785404574)
INSERT INTO Component VALUES(192359467,785404769)
INSERT INTO Component VALUES(192359845,785404867)
INSERT INTO Component VALUES(192359303,785404201)
INSERT INTO Component VALUES(192359942,785404675)


CREATE TABLE TypeComponent (
    TypeComponentID varchar2(9) PRIMARY KEY
    , Type_Description varchar2(30) CONSTRAINT Type_Description 
        CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL
)

INSERT INTO TypeComponent VALUES(785404309, 'Strap')
INSERT INTO TypeComponent VALUES(785404574, 'Stud')
INSERT INTO TypeComponent VALUES(785404769, 'Buckle')
INSERT INTO TypeComponent VALUES(785404867, 'Strap')
INSERT INTO TypeComponent VALUES(785404201, 'Buckle')
INSERT INTO TypeComponent VALUES(785404675, 'Stud')

这是两张表。ComponentTypeComponentComponent是 的父实体TypeComponent,我正在尝试运行以下 INSERT 语句:

INSERT INTO Component VALUES(192359823,785404309)

但它给了我错误

这是我迄今为止在 Oracle SQL 开发中的会话

4

4 回答 4

11

尝试TypeComponent先插入您的表格,然后再插入您的Component表格。

根据错误:

ORA-02291:    违反完整性约束(string.string) - 未找到父键
原因:            外键值没有匹配的主键值。
行动:            删除外键或添加匹配的主键。

这意味着您引用的表中没有匹配的键。

编辑#1

为了您的信息,这里是一个站点,您可以在其中获得有关所有 Oracle 错误代码的帮助。

http://[ora-02291].ora-code.com/

这是该站点的主页:http ://www.ora-code.com/

您可以在其中替换 URL 中的错误代码以适合您获得的错误代码,并且您将访问该错误的页面。

于 2010-12-03T21:14:11.490 回答
3

请发布您的整个 SQLPLUS 会话,以便该错误很容易重现。

看起来插入子表是在插入导致此错误的父表之前完成的。

更改插入顺序并重新运行代码。

SQL> CREATE TABLE TypeComponent(
  2    TypeComponentID varchar2(9) PRIMARY KEY, 
  3    Type_Description     varchar2(30) 
  4    CONSTRAINT Type_Description CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL
  5  )
  6  ;

Table created.

SQL> CREATE TABLE Component(
  2    ComponentID varchar2(9) PRIMARY KEY, 
  3    TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID)
  4  )
  5  ;

Table created.

SQL> INSERT INTO Component VALUES(192359823,785404309);
INSERT INTO Component VALUES(192359823,785404309)
*
ERROR at line 1:
ORA-02291: integrity constraint (COAMGR.SYS_C002513823) violated - parent key
not found

SQL> INSERT INTO TypeComponent VALUES(785404309, 'Strap');

1 row created.

SQL> INSERT INTO Component VALUES(192359823,785404309);

1 row created.

SQL> commit;

Commit complete.
于 2010-12-03T21:08:42.863 回答
1

component表中你有

 TypeID REFERENCES TypeComponent(TypeComponentID)

然后你继续

INSERT INTO Component VALUES(192359823,785404309)

如果您先执行此操作,则 Oracle 将抛出错误,因为您试图将表中不存在的值Integrity constraint插入表中。componentTypeComponent

这是一个问题,因为您已经提到这TypeID是一个外键,即在插入之前TypeID需要存在的值TypeComponentComponent

于 2010-12-03T21:12:41.867 回答
1

引用的键(在我的情况下为外键)有时会出现此错误,这有错误。请在表中重新创建引用的键。

于 2013-04-01T20:49:03.967 回答