전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Database/Oracle

[Oracle] CONSTRAINT(제약조건)_FOREIGN KEY(외래키)_삭제옵션

2023. 7. 29. 14:51

자식 테이블 생성시 외래키 제약조건 부여할 때 삭제옵션 지정가능
* 삭제옵션 : 부모테이블의 데이터 삭제시 그 데이터를 사용하고 있는 자식테이블의 값을 
                어떻게 처리할껀지 
                
- ON DELETE RESTRICTED (기본값) : 삭제제한옵션으로, 자식데이터로 쓰이는 부모테이터는 삭제 아예 안되게끔
- ON DELETE SET NULL : 부모데이터 삭제시 해당 데이터를 쓰고 있는 자식데이터의 값을 NULL로 변경
- ON DELETE CASCADE : 부모데이터 삭제시 해당 데이터를 쓰고 있는 자식데이터도 같이 삭제시킴


SET NULL 옵션

CREATE TABLE MEM( 
    MEM_NO NUMBER PRIMARY KEY,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER CHAR(3) CHECK (GENDER IN('남', '여')),
    PHONE VARCHAR2(13),
    EMAIL VARCHAR2(50),
    GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE SET NULL
    -- ,FOREIGNKEY(GRADE_ID) REFERENCES MEM_GRADE(GRADE_CODE)
);
INSERT INTO MEM
VALUES(1, 'user01', 'pass01', '손흥민', '남', null, null, null);

INSERT INTO MEM
VALUES(2, 'user02', 'pass02', '이강인', null, null, null, 10);

INSERT INTO MEM
VALUES(3, 'user03', 'pass03', '이승우', '남', null, null, 20);
     
INSERT INTO MEM
VALUES(4, 'user04', 'pass04', '안정환', null, null, null, 10);

COMMIT;

-- 10번 등급 삭제
DELETE FROM MEM_GRADE
WHERE GRADE_CODE = 10;
-- 잘 삭제됨! (단, 10을 가져다 쓰고 있던 자식데이터의 값은 NULL로 변경)


CASCADE 옵션

CREATE TABLE MEM( 
    MEM_NO NUMBER PRIMARY KEY,
    MEM_ID VARCHAR2(20) NOT NULL UNIQUE,
    MEM_PWD VARCHAR2(20) NOT NULL,
    MEM_NAME VARCHAR2(20) NOT NULL,
    GENDER CHAR(3) CHECK (GENDER IN('남', '여')),
    PHONE VARCHAR2(13),
    EMAIL VARCHAR2(50),
    GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE CASCADE
    -- ,FOREIGNKEY(GRADE_ID) REFERENCES MEM_GRADE(GRADE_CODE)
);
INSERT INTO MEM
VALUES(2, 'user02', 'pass02', '이강인', null, null, null, 10);

INSERT INTO MEM
VALUES(3, 'user03', 'pass03', '이승우', '남', null, null, 20);
     
INSERT INTO MEM
VALUES(4, 'user04', 'pass04', '안정환', null, null, null, 10);

 

DELETE FROM MEM_GRADE
WHERE GRADE_CODE = 10;

 

    'Database/Oracle' 카테고리의 다른 글
    • [Oracle] SUBQUERY를 이용한 테이블 생성
    • [Oracle] DEFAULT 옵션
    • [Oracle] CONSTRAINT(제약조건)_FOREIGN KEY(외래키)
    • [Oracle] CONSTRAINT(제약조건)_PRIMARY KEY
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바