본문 바로가기

개발/SQL

[SQL] Oracle - (DDL) ALTER / DROP

< DDL (Data Definition Language) >

 

- 데이터 정의 언어

- 오라클에서 제공하는 객체(Object)*를 새로이 만들고(CREATE), 구조를 하고(ALTER),

  구조 자체를 삭제하는(DROP) 명령문

- 주로 DB관리자, 설계자가 사용하는 데이터 구조 자체를 정의하는 언어 

 

* 오라클에서의 객체(구조)

: 테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE)

  인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGER)

  프로시져(PROCEDUER), 함수(FUNCTION)

  동의어(SYNONYM), 사용자(USER)

 

 

< ALTER >

 

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

 

1-1. 컬럼 추가 (ADD)

[ 표현법 ] ADD 추가할컬럼명 데이터타입 (DEFAULT 기본값)-생략가능

-- CNAME 컬럼 추가
ALTER TABLE DEPT_COPY ADD CNAME VARCHAR2(20);
-- 새로 컬럼이 만들어지고 기본적으로 NULL값으로 채워짐

-- LNAME 컬럼 추가 DEFAULT 기본값'한국'
ALTER TABLE DEPT_COPY ADD LNAME VARCHAR2(20) DEFAULT '한국';
-- 새로 컬럼이 만들어지고 기본값이 NULL이 아닌 DEFAULT값으로 채워짐

1-2. 컬럼 수정 (MODIFY)

 - 데이터타입 수정 : [ 표현법 ] MODIFY 수정할컬럼명 바꾸고자하는데이터타입;

❗❗ 현재 담겨있는 값과 완전히 다른 타입으로는 변경 불가

     ( 문자 → 숫자 X / 문자열 사이즈 축소 X / 문자열 사이즈 확대 O )

 - DEAFAULT값 수정 : [ 표현법 ] MODIFY 수정할컬럼명 DEFAULT 바꾸고자하는기본값;

-- LOCATION_ID컬럼의 데이터타입을 VARCHAR2(3)로
ALTER TABLE DEPT_COPY MODIFY LOCATION_ID VARCHAR2(3);
-- LNAME컬럼의 기본값을 '미국'으로 변경
ALTER TABLE DEPT_COPY MODIFY LNAME DEFAULT '미국'; -- 컬럼값이 수정되는 것은 아님

1-3. 컬럼 삭제 (DROP COLUMN)

[ 표현법 ] DROP COLUMN 삭제하고자하는컬럼명;

-- DEPT_ID컬럼 지우기
ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_ID;
ALTER TABLE DEPT_COPY2 DROP COLUMN DEPT_TITLE;
ALTER TABLE DEPT_COPY2 DROP COLUMN LOCATION_ID;
ALTER TABLE DEPT_COPY2 DROP COLUMN CNAME;
ALTER TABLE DEPT_COPY2 DROP COLUMN LNAME; -- cannot drop all columns in a table
-- 마지막 컬럼 삭제 실행 시, 오류 발생

2-1. 제약조건 추가

- NOT NULL : [ 표현법 ]  MODIFY 컬럼명 NOT NULL;

- UNIQUE/CHECK/PRIMARY KEY : [ 표현법 ] ADD 제약조건(컬럼명);

- FOREIGN KEY : [ 표현법 ] ADD FOREIGN KEY(컬럼명) REFERENCES 참조할테이블명(참조할컬럼명);

ALTER TABLE DEPT_COPY
ADD CONSTRAINT DCOPY_PK PRIMARY KEY(DEPT_ID) -- CONSTRAINT로 제약조건명 생성
ADD CONSTRAINT DCOPY_UQ UNIQUE(DEPT_TITLE)
MODIFY LNAME CONSTRAINT DCOPY_NN NOT NULL;
-- 한 테이블 내의 작업은 한 번에 처리 가능

2-2. 제약조건 삭제

- NOT NULL : [ 표현법 ] MODIFY 컬럼명 NULL (NOT NULL → NULL)

- UNIQUE/CHECK/PRIMARY KEY/FOREIGN KEY : [ 표현법 ] DROP CONSTRAINT 제약조건명;

-- DCOPY_PK 제약조건 지우기
ALTER TABLE DEPT_COPY DROP CONSTRAINT DCOPY_PK;

-- LNAME의 제약조건 지우기 NOT NULL => NULL
ALTER TABLE DEPT_COPY MODIFY LNAME NULL;

3-1. 컬럼명 변경 : [ 표현법 ] RENAME COLUMN 기존컬럼명 TO 바꿀컬럼명;

ALTER TABLE DEPT_COPY RENAME COLUMN DEPT_TITLE TO DEPT_NAME;

3-2. 제약조건명 변경 : [ 표현법 ] RENAME CONSTRAINT 기존제약조건명 TO 바꿀제약조건명;

ALTER TABLE DEPT_COPY RENAME CONSTRAINT SYS_C007192 TO DCOPY_98;

3-3. 테이블명 변경 : [ 표현법 ] RENAME TO 바꿀테이블명;

ALTER TABLE DEPT_COPY RENAME TO DEPT_TEST;

 

 

< DROP >

 

- 객체를 삭제하는 구문

- 참조된 부모테이블은 삭제 불가

   > 자식테이블을 먼저 삭제하고 부모테이블을 삭제

   [ 표현법 ] DROP TABLE 자식테이블; DROP TABLE 부모테이블;

   > 부모테이블 삭제할 때,  맞물려있는 제약조건도 함께 삭제

   [ 표현법 ] DROP TABLE 부모테이블 CASCADE CONSTRAINT;