[Oracle] ora-02291 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다
- 코딩/Oracle
- 2020. 11. 25.
[Oracle] ora-02291 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다
ORA-02291 오류는 외래 키 무결성 제약 조건을 위반하였을 때 발생합니다. 이 오류는 자식 테이블의 특정 열에 대한 외래 키 제약 조건이 존재하며, 이 열의 값이 부모 테이블의 기본 키 또는 후보 키와 일치하지 않을 때 발생합니다.
해결방법
- 오류가 발생한 자식 테이블에서 부모 테이블의 레코드를 참조하는 열 값을 확인합니다.
- 해당 부모 테이블에서 해당 열 값을 가진 레코드가 존재하는지 확인합니다. 만약 존재하지 않는다면 부모 테이블에 레코드를 추가하거나 열 값을 수정해야 합니다.
- 자식 테이블의 외래 키 열 값을 부모 테이블에서 해당하는 기본 키 또는 후보 키 값으로 수정합니다.
INSERT INTO service_review_7(servicereviewidx,subject,CONTENT,serviceidx,useridx) VALUES(500,'hihih','ufufuf',7,1)
오류 보고 -
SQL 오류: ORA-02291: integrity constraint (BONG.FK_SERV_REV_USERIDX_7) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause: A foreign key value has no matching primary key value.
*Action: Delete the foreign key or add a matching primary key.
원인: BONG이라는 이름의 DB의 FK_SERV_REV_USERIDX_7 제약조건에서 오류가 발생
-> userIdx가 참조하는 테이블의 parent key 를 찾을 수 없다.
나의경우,
INSERT INTO service_review_7(servicereviewidx,subject,CONTENT,serviceidx,useridx) VALUES(500,'hihih','ufufuf',7,1)
이 쿼리를 실행하다가 오류가 났다.
해결:
1. FK_SERV_REV_USERIDX_7 이 참조하는 테이블에 현재 실행한 쿼리의 값이 존재하는지 확인
(예를들어, 현재 쿼리의 userIdx는 1 이라는 값을 실행하려고 하는데, 이 userIdx가 참조하는 테이블에도 1이라는 값이 있는지)
2. FK_SERV_REV_USERIDX_7가 참조하는 테이블에 해당 컬럼(userIdx)가있는지
3. FK_SERV_REV_USERIDX_7가 참조하는 테이블이 잘못 지정되어있지 않는지
프로젝트 특성상, 멤버 관리를 효율적으로 하기 위해 테이블을 여러번 수정 하고서는
수정해야할 제약조건 몇개가 누락되어 이 오류가 발생했다.
※ 테이블 수정 시, 확인 해야할 것들! ※
1. mapper
2. 테이블의 제약조건
'코딩 > Oracle' 카테고리의 다른 글
[Oracle] ORA-01722 INVALID NUMBER 해결방법 (0) | 2020.12.30 |
---|---|
[Oracle] 오라클 계층형 쿼리(START WITH.. CONNECT BY) (0) | 2020.11.23 |
[ORACLE] 오라클 문자열 자르기(SUBSTR, INSTR, REPLACE, REGXEP_SUBSTR)사용방법 (0) | 2020.03.18 |
[Oracle] PL/SQL IF ELSE 문 사용방법 (0) | 2020.03.17 |
[ORACLE] 오라클 덤프 EXP 옵션 및 방법 (0) | 2020.03.09 |