▣ 참조무결성 제약(ON DELETE RESTRICT, ON UPDATE CASCADE)
외래키 옵션
1) On Delete
Cascade : 부모 데이터 삭제 시 자식 데이터도 삭제
Set null : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Null로 업데이트
Set default : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
Restrict : 자식 테이블이 참조하고 있을 경우, 데이터 삭제 불가
No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.
2) On Update
Cascade : 부모 데이터 업데이트 시 자식 데이터도 업데이트
Set null : 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Null로 업데이트
Set default : 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
Restrict : 자식 테이블이 참조하고 있을 경우, 업데이트 불가
No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.
오라클하고 MY SQL 문법이 달라서, MY SQL 설치했어요 ㅠㅠ
ON DELETE RESTRICT 설정으로 부서 릴레이션의 부속성 부서번호에 대한 삭제불가 -> MY SQL에서 제공
ON UPDATE CASCADE 설정으로 부서 릴레이션의 부서 릴레이션의 부서번호도 갱신 연산 성공함 -> MY SQL에서 제공
2013년 53번
정답 : 3번
CREATE TABLE DEPT_53
(
DNO INT
, DNAME VARCHAR(20) NOT NULL
, PRIMARY KEY (DNO)
)
;
INSERT INTO DEPT_53 VALUES (1, '총무부');
INSERT INTO DEPT_53 VALUES (2, '기획부');
INSERT INTO DEPT_53 VALUES (3, '자재부');
INSERT INTO DEPT_53 VALUES (4, '영업부');
COMMIT;
SELECT * FROM DEPT_53;
DROP TABLE EMP_53;
CREATE TABLE EMP_53
(
ENAME VARCHAR(20)
, EDNO INT NOT NULL
, PRIMARY KEY (ENAME)
, FOREIGN KEY (EDNO) REFERENCES DEPT_53(DNO)
ON DELETE RESTRICT
ON UPDATE CASCADE
)
;
INSERT INTO EMP_53 VALUES ('박동호',1);
INSERT INTO EMP_53 VALUES ('이수아',1);
INSERT INTO EMP_53 VALUES ('강승희',2);
INSERT INTO EMP_53 VALUES ('김민지',2);
COMMIT;
SELECT * FROM EMP_53;
DELETE FROM DEPT_53 WHERE DNO = 1; -- ON DELETE RESTRICT 설정으로 인해 참조되고 있는 부서 릴레이션의 부속성 부서번호에 대한 삭제 불가
UPDATE DEPT_53 SET DNO = 5 WHERE DNO = 2; -- ON UPDATE CASCADE 설정으로 참조되고 있는 부서 릴레이션의 부서번호 갱신 연산 성공함
SELECT DISTINCT(EDNO) FROM EMP_53; -- DISTINCT 중복 제거로 1,5 값만 출력