当前位置: 首页 > 知识库问答 >
问题:

ORA-02291:完整性约束(系统SYS_C007150)被违反-未找到父密钥

林涵映
2023-03-14

当我创建表EMPLOYEE时,我将ESSN作为主键,将SUPERSSN作为外键从同一个表中创建,DNO作为dep表中的外键,当我想插入显示的值时,现在我感到困惑。

该表包含以下内容:

 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 ENAME                                     NOT NULL VARCHAR2(30)
 ESSN                                      NOT NULL CHAR(14)
 BDATE                                              DATE
 DNO                                                NUMBER(38)
 SUPERSSN                                           CHAR(14)

我第一次使用以下命令行:

INSERT INTO EMPLOYEE ('JOSEPH','789456','14-DEC-1986','3','123');

然后我尝试不使用DNO,如下所示:

SQL> INSERT INTO EMPLOYEE (ENAME,ESSN,BDATE)

  2  VALUES('JOSEPH','9861050560','14-DEC-1986');
-------------------------------
INSERT INTO EMPLOYEE (ENAME,ESSN,BDATE)
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.SYS_C007150) violated - parent key not
found
----------------------------

共有3个答案

龚振濂
2023-03-14

下面是一个查询,可以用来检查外键表中的值是否存在,当然,如果它们不存在,则必须插入它们以解决父键冲突:

SELECT E.* FROM EMPLOYEE E 
    LEFT JOIN SUPER_TABLE S
        ON E.SUPERSSN = S.SUPERSSN 
WHERE S.SUPERSSN IS NULL AND E.SUPERSSN IS NOT NULL;

当然,这是假设问题出在SUPERSSN键上。如果您有其他外键,那么您可能还需要检查这些外键。

羊渝
2023-03-14

我认为您正在输入的新条目(具有外键约束)是指不存在的条目

宋望
2023-03-14

最有可能parent_key记录是SUPERSSN(假设)必须在父表中丢失。你可以通过

SELECT *
  FROM user_constraints
 WHERE table_name = 'EMPLOYEE'

因此,您需要首先在雇员表的父表中插入值,然后在子表中插入值。

要查找父表,请执行以下操作

SELECT    uc.constraint_name
         || CHR (10)
         || '('
         || ucc1.TABLE_NAME
         || '.'
         || ucc1.column_name
         || ')'
            constraint_source,
            'REFERENCES'
         || CHR (10)
         || '('
         || ucc2.TABLE_NAME
         || '.'
         || ucc2.column_name
         || ')'
            references_column
   FROM user_constraints uc, user_cons_columns ucc1, user_cons_columns ucc2
   WHERE uc.constraint_name = ucc1.constraint_name
   AND uc.r_constraint_name = ucc2.constraint_name
   AND ucc1.POSITION = ucc2.POSITION 
   AND UC.TABLE_NAME = 'EMPLOYEE'
   AND uc.constraint_type = 'R'

更多的细节,请看看这个。

经历这个和这个。

 类似资料:
  • 所以这里是我的数据库: 插入表格: 批次表不断出现的错误是:ORA-02290:违反了检查约束(EJAY.batches\u DATE\u CHK) 学生表出现的错误是:ORA-02291:违反完整性约束-未找到父键 我感到困惑的是,它只显示在表格中的一些行。教职员工和课程都很好,只有这两个。如果答案很明显,我道歉,我是初学者。请帮帮忙

  • 我试图为和创建会话,这两个表都与相同的外键关联到登录表-但是当我为创建种子时,我得到了错误,在我的另一个问题在这个链接中,我没有以最好的方式解释,但得到了一些关于使用(党-角色-关系模型)和这段代码下面他更多的想法有关已解决的问题链接 创建表和主键 创建表和主键 创建表以及主键和外键 使用表为管理员创建会话的过程: 使用表为用户创建会话的过程: 创建管理会话时,我收到一个错误 我做错了什么?

  • 我遇到了一些SQL外键的问题。 下面是我的表和插入SQL。 SQL ORA-02291:违反完整性约束-未找到父键 我不知道为什么我的外键是错的?

  • 当我做插入它给我这个错误: ORA-02291:违反完整性约束(H00300581.FK_类)-未找到父密钥 对于注册表中的所有插入,都会发生此错误。我需要帮忙,请帮我修一下。 是否来自表中的外键?可能是因为我什么都试过了,但都没用。 创建表 创建序列 培训师数据 类数据 成员数据 注册资料

  • 问题内容: 嗨,我正在Oracle SQL开发人员中开发数据库,​​试图从另一个表访问foriegn键。我目前正在使用以下CREATE语句创建的ItemOrdered表 如您所见,我具有以下前键Ords和BeltID。 现在,当我尝试运行以下语句时 它给了我以下错误 违反-找不到父密钥02291。00000-“违反完整性约束(%s。%s)-找不到父密钥” 如果需要,我已经提供了Ords CREAT

  • 我最近正在了解这一点,我想知道我是否可以帮助自己,这里是我的数据库: 插入值