자식 테이블 생성시 외래키 제약조건 부여할 때 삭제옵션 지정가능
* 삭제옵션 : 부모테이블의 데이터 삭제시 그 데이터를 사용하고 있는 자식테이블의 값을
어떻게 처리할껀지
- 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;