데이터베이스

참조무결성 제약(ON DELETE RESTRICT, ON UPDATE CASCADE), 직원과 부서, 부서번호 삭제, 부서번호 업데이트, SQL

스윙스윙 2021. 8. 11. 13:19

▣ 참조무결성 제약(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 값만 출력