고래씌

[Oracle] 8-1. DDL(ALTER, DROP) ① - ALTER 본문

Database/Oracle

[Oracle] 8-1. DDL(ALTER, DROP) ① - ALTER

고래씌 2023. 11. 30. 10:17

1. DDL (Data Definition Language)

: 객체들을 새롭게 생성(CREATE)하고, 수정, 삭제하는 구문

 

 

2. ALTER

: 객체 구조를 수정하는 구문

 

 

    [표현법]

   ALTER TABLE 테이블명 수정할 내용;

 


▶ 수정할 내용
   1) 컬럼 추가 / 수정 / 삭제
   2) 제약조건 추가 / 삭제 => 수정은 불가
   3) 테이블명 / 컬럼명 / 제약조건명 수정

 


1) 컬럼추가 / 수정 /삭제

1-1) 컬럼추가 (ADD) 

: ADD 추가할 컬럼명 자료형 [DEFAULT 기본값] [] 생략가능

 

 

▶ DEPT_COPY 테이블에 CNAME 칼럼 추가

ALTER TABLE DEPT_COPY ADD CNAME VARCHAR2(20);

 

 

☞ 새로운 칼럼이 만들어지고 NULL값으로 채워짐

 

 

▶ DEPT_COPY 테이블에 LNAME 컬럼 추가 DEFAULT 설정

ALTER TABLE DEPT_COPY ADD LNAME VARCHAR2(20) DEFAULT '한국';

 

 

☞ 새로운 칼럼이 만들어지고 NULL 값이 아닌 DEFALUT 값으로 채워짐

 


1_2) 칼럼 수정 (MODIFY)

- 칼럼의 자료형 수정 : MODIFY 수정할 컬럼명 바꾸고자하는 자료형
- DEFAULT 값 수정 : MODIFY 수정할 컬럼명 DEFAULT 바꾸고자하는 기본값

 

 

▶ DEPT_COPY 테이블의 DEPT_ID 컬럼이 자료형을 CHAR(3)으로 변경

ALTER TABLE DEPT_COPY MODIFY DEPT_ID CHAR(3);

 

 

☞ 정상적으로 자료형 변경됨

☞ 하지만... CHAR(2)로 변경하게 된다면..?

 

 

☞ 에러발생. 현재 변경하고자하는 칼럼에 이미 담겨있는 값보다 더 작은 크기로 변경이 불가하다.

 

☞ 에러발생. 현재 변경하고자하는 칼럼에 이미 담겨있는 값과 완전히 다른 타입으로 변경이 불가하다.

 

=> 문자 → 숫자 X / 값이 담겨있다면 문자열 사이즈 축소 X / 사이즈 확대 (O)

 

 

▶ 한번에 여러개의 컬럼 변경

DEPT_TITLE 컬럼의 데이터타입을 VARCHAR2(40)으로
LOCATION_ID 컬럼의 데이터타입을 VARCHAR2(2)로
LNAME의 기본값을 미국으로 바꾸기

 

 


1_3) 컬럼 삭제 (DROP COLUMN)

DROP COLUMN 삭제하고자하는 칼럼명

 

 

▶ DEPT_COPY2 테이블 생성후 DEPT_COPY2로부터 DEPT_ID 칼럼 지우기

 

 

 

☞ DEPT_ID 칼럼이 삭제된 것 확인

☞ 이때, ROLLBACK을 이용하여 복구가 불가능하다. ROLLBACK은 DDL구문은 복구가 불가능하다.

 

 

 

모든 칼럼을 지워보기

 

☞ 위에 3개는 삭제가 정상적으로 되지만, 마지막행 LNAME은 오류가 발생한다. 

☞ 테이블에는 최소 한개의 컬럼은 존재해야하기 때문에 마지막 컬럼은 삭제할 수 없다.

 

 


2) 제약조건 추가 / 삭제 

2_1) 제약조건 추가

 

▶ 제약조건(PRIMARY KEY, FOREGIN KEY, UNIQUE, CHECK, NOT NULL)
    ADD 제약조건(컬럼명) [REFERENCES 참조할 테이블명(참조할 컬럼명)]

 

NOT NULL 제약조건 같은 경우 MODIFY 컬럼명 NOT NULL;
제약조건의 이름을 부여하고자 한다면 CONSTRAINT 제약조건명을 추가

 

 

▶ DEPT_COPY 테이블로부터 DEPT_ID에는 PRIMARY KEY, DPET_TITLE UNIQUE, LNAME NOT NULL 제약조건 부여

 

 

 

 


 2_2) 제약조건 삭제

    PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK
    DROP CONSTRAINT [제약조건명];
    
    NOT NULL : MODIFY 컬럼명 NULL;

 

 

▶ DEPT_COPY 테이블로부터 DCOPY_PK 제약조건 삭제

▶ DCOPY_UQ, DCOPY_NN 제약조건 삭제

 


3) 컬럼명 / 제약조건명 / 테이블명 변경 (RENAME)

3_1) 컬럼명 변경

: RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;

 

 

▶ DEPT_COPY 테이블에서 DEPT_TITLE 컬럼을 DEPT_NAME으로 바꾸기

 

☞ DEPT_NAME으로 변경됨

 

 

3_2) 제약조건명 변경

RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명

 

 

▶  DEPARTMENT의 SYS_C006998을 DCOPY_NN 으로 변경

 

 

 

☞ 제약조건명이 DCOPY_NN으로 변경됨

 

 

 

3_3) 테이블명 변경

RENAME [기존테이블명] TO 바꿀테이블명

 

 

 

☞  테이블명 변경됨