본문 바로가기
Database

Oracle 무결성 제약조건 위배되었습니다- 부모 키가 없습니다

by Lcoding 2024. 11. 28.
반응형

안녕하세요,

 

오늘은 Oracle에서 데이터 insert 및 delete시에 발생하는 무결성 제약조건에 대하여 알아보겠습니다.

 

삽입시.
ORA-02291: 무결성 제약조건(USER_NAME.SYS_C012345)이 위배되었습니다- 부모 키가 없습니다

 

삭제시.

ORA-02292: 무결성 제약조건(USER_NAME.SYS_C012345)이 위배되었습니다- 부모 키가 없습니다

 

두가지 경우 중 오늘은 삭제시 조치방법에 대하여 알아보겠습니다.

데이터베이스에서 외래 키(Foreign Key) 제약 조건이 위반되었을 때 발생합니다.

이 오류는 특정 레코드가 삭제되거나 업데이트될 때, 그 레코드에 의존하는 자식 레코드가 있는 경우에 주로 발생합니다.

 

- 원인

이 오류의 원인은 보통 다음 중 하나입니다:

  1. 부모 테이블에 존재하지 않는 키를 자식 테이블에서 참조하려고 시도했을 때.
  2. 부모 테이블의 레코드를 삭제하려고 했는데, 해당 레코드를 참조하는 자식 테이블의 레코드가 존재할 때.

- 해결 방법

  1. 자식 테이블의 데이터를 먼저 삭제하거나 수정:
    • 부모 레코드가 참조되지 않도록 자식 테이블에서 관련 레코드를 삭제합니다.
DELETE FROM 자식_테이블 WHERE 부모_키 = '값';

 

2. ON DELETE CASCADE 옵션 확인:

  • 부모 테이블에서 레코드를 삭제할 때, 자식 테이블의 연관된 레코드도 자동으로 삭제되도록 설정합니다. 테이블 생성 시 ON DELETE CASCADE 옵션을 추가하거나, 기존 제약 조건을 삭제하고 재생성해야 합니다.
ALTER TABLE 자식_테이블
ADD CONSTRAINT fk_부모_키 FOREIGN KEY (부모_키) REFERENCES 부모_테이블(키) ON DELETE CASCADE;

 

3. 부모 테이블에 해당 키 추가:

  • 자식 테이블에서 참조하는 키가 부모 테이블에 없다면, 부모 테이블에 해당 레코드를 삽입합니다.
INSERT INTO 부모_테이블 (키_컬럼, 기타_컬럼) VALUES ('값', '기타값');

 

4. 제약 조건 제거(임시 해결책):

  • 제약 조건을 일시적으로 제거할 수 있습니다. 하지만 데이터 무결성이 깨질 수 있으므로 신중히 사용하세요.
ALTER TABLE 자식_테이블 DROP CONSTRAINT 제약조건_이름;

 

 

 

위와 같은 방법으로 조치가 가능하며, 아래와 같은 방법으로 제약조건이 걸린 테이블 및 상세 정보를 확인가능합니다.

SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME='제약조건이름'

 

감사합니다.

반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading