본문 바로가기

오류&해결

[Oracle] ORA-02292: integrity constraint (SPRING.SYS_C008185) violated - child record found 오류

CREATE TABLE MEMBER(
    MEMBER_ID       VARCHAR2(20)        PRIMARY KEY,    -- 회원 아이디
    MEMBER_PW       VARCHAR2(20)        NOT NULL,       -- 회원 비밀번호
    MEMBER_NAME     VARCHAR2(20),                       -- 회원 이름
    ADDRESS         VARCHAR2(300),                      -- 주소
    ENROLL_DATE     CHAR(10)                            -- 가입일
);

 

CREATE TABLE BOARD(
    BOARD_NO        NUMBER              PRIMARY KEY,   -- 게시판 번호
    BOARD_TITLE     VARCHAR2(300)       NOT NULL,      -- 게시판 제목
    BOARD_CONTENT   VARCHAR2(500)       NOT NULL,      -- 게시판 내용
    BOARD_WRITER    VARCHAR2(20)        REFERENCES MEMBER(MEMBER_ID) ON DELETE CASCADE,  -- 작성자
    BOARD_DATE      CHAR(10)                           -- 게시판 작성일
);

 

< 원인 >

회원 테이블에서 MEMBER_ID를 PRIMARY KEY(unique + not null 동시에 만족해야함)로 설정했다.

그리고 게시판 테이블 BOARD_WRITER 작성자는 MEMBER_ID를 참조하도록 REFERENCES를 걸어줬다.

 

MEMBER 테이블을 삭제하려고 하니 아래와 같은 오류가 떴다

연결정보때문에 삭제가 안됐던거다...

ORA-02292: integrity constraint (SPRING.SYS_C008185) violated - child record found

 

 

 

< 해결 >

해당 테이블의 자식 레코드를 삭제한 다음 (board) 원래 삭제하려던 테이블 (member)을 삭제하면 된다!!!

 

 


<참고>

FOREIGN KEY - 삭제옵션

1. ON DELETE RESTRICTED

아무것도 지정하지 않는 경우 설정되는 기본 삭제 옵션으로

자식테이블에서 부모테이블의 데이터를 참조하고 있는 경우 데이터 삭제가 불가능 함

2. ON DELETE SET NULL

부모 테이블의 데이터 삭제 시 해당 데이터를 참조하고 있던 자식 테이블의 컬럼 값을 NULL로 변경하는 옵션

3. ON DELETE CASCADE

부모 테이블의 데이터 삭제 시 해당 데이터를 참조하고 있던 자식 테이블의 데이터까지 모두 삭제하는 옵션

반응형