전공/데이터베이스

6-3. SQL 스키마 변경문

문정훈 2021. 10. 27. 01:16

1. 스키마 삭제 DROP 명령

이전에서 다루었던 갱신 연산은 투플 단위로 일어나는 갱신 연산이었다. 

스키마 변경문 갱신 연산에 대해 알아본다.

1) cascade 설명

테이블에서 투플의 삭제 연산을 수행할 때 cascade 옵션에 대해 우선적으로 설명한다.
cascade 개념이 뭔지 알기 위해서임.

DEPARTMENT의 Dnumber 중 111이라는 번호를 제거하는 연산을 한다고 생각해보자. 이때 EMPLOYEE의 Esn(외래키) 는 Dnumber를 참조하기 때문에 삭제 연산이 거부되지면 옵션2인 cascade 옵션을 사용하면 연쇄 삭제로 아래와 같이 삭제가 가능하다.

DEPARTMENT의 Dnumber 중 111 삭제 -> EMPLOYEE의 Esn중 111을 가진 EMPLOYEE relation의 tuple 삭제 수행 

 

2) DROP 명령문

테이블, 도메인, 타입, 제약 조건과 같이 이름을 가진 스키마를 통체로 제거한다. 

제거시 CASCAEDE 또는 RESTRICT 옵션 중 한 가지를 가진다. 

DROP SCHEMA DEPARTMENT CASCADE;

위 명령은 DEPARTMENT라는 테이블 스키를 삭제하는 연산인데 옵션으로 CASCADE를 사용한것이다. 

DEPARTMENT 스키마를 지우는데 외래키와 같이 이 테이블을 참조하는 모든 제약 조건, 뷰 등을 연쇄적으로 함께 삭제한다. 

예를 들어 DEPARTMENT는 Dnumber속성을 가지는데 EMPLOYEE의 Esn(외래키) 는 Dnumber를 참조하기 때문에 EMPLOYEE 스키마도 연쇄적으로 지운다. 

 

만약 옵션으로 RESTRICT 를 사용하면 DEPARTMENT가 참조가 되지 않는 경우에만 제거가 가능하다. 참조 되고 있다면 삭제 연산이 거부된다. 

 

 

3) ALTER 명령문

● 새로운 열 ( 애트리뷰트) 추가

ALTER TABLE EMPLOYEE ADD COLUMN job VERCHAR(12);

jop이름을 가지고 데이터 타입은 VERCHAR(12)인 애트리뷰트를 기존에 있던 테이블에 추가한 것이다. 

그럼 애트리뷰트가 추가되었으니 기존에 있던 투플들이 jop의 값을 가져야한다. 디폴트 절을 명시하지 않으면 위 명령 직후 모든 tuple의 jop 값은 NULL이다. 따라서

디폴트절을 사용하여 디폴드 값을 넣거나 투플 한개한개 일일이 값을 지정해줘야한다. 

 

● 한 열 제거하는 경우

ALTER TABLE EMPLOYEE DROP COLUMN Address CASCADE;

열을 제거하는 경우 역시 옵션 CASCAEDE 또는 RESTRICT 옵션 중 한 가지를 사용해야한다 .

CASCAEDE 옵션을 사용하면 해당 애트리뷰트가 참조하는 모든 관련된 제약 조건과 뷰들이 자동으로 제거된다. 

만약 삭제하는 열의 애트리뷰트가 다른 릴레이션에서 참조하고 있는 애트리뷰트라면 ? => 참조하는 릴레이션을 통체로 삭제하는지는 잘 모르겠다...

 

● 한 열에서 디폴트 절을 제거하는 경우

ALTER TABLE DEPARTMENT ALTER COLUMN Mgr_ssn DROP DEFAULT;

CREATE TABLE을 할 때 애트리뷰트를 생성하는데 이때 DEFAULT를 지정한 애트리뷰트가 있을 수 있다. 이 DEFAULT를 제거하는 것이다. 

 

● 한 열에서 디폴트 값을 변경하는 경우

ALTER TABLE DEPARTMENT ALTER COLUMN Mgr_ssn SET DEFAULT '1111';

CREATE TABLE을 할 때 애트리뷰트를 생성하는데 이때 DEFAULT를 지정한 애트리뷰트가 있을 수 있다. 이 DEFAULT의 값을 변경하는 것이다. 

 

 

●  이름을 가진 제약 조건 제거 방법

ALTER TABLE EMPLOYEE DROP CONSTRAINT M1 CASCADE;

EMPLOYEE 테이블로 부터 M1이라는 이름을 가진 제약 조건을 제거하는 것이다.