본문 바로가기
프로그래밍/데이터베이스

오라클 ALTER 명령을 사용해서 테이블 변경하기

by pentode 2018. 4. 9.

ALTER 명령어를 사용해서 오라클 테이블 구조를 변경하는 방법에 대해 알아봅니다.

 

 

1. 테스트용 테이블 생성 스크립트 입니다.

 

CREATE TABLE TB_BOARD (
	NUM        NUMBER(20,0) NOT NULL,
	NAME       VARCHAR2(20) NOT NULL,
	TITLE      VARCHAR2(100) NOT NULL,
	CONTENT    CLOB,
	D_CODE     VARCHAR(20),
	READ_COUNT NUMBER(10,0) DEFAULT 0 NOT NULL,
	WRITE_DATE DATE NOT NULL
);

CREATE TABLE TB_DEPT (
	D_CODE    VARCHAR2(20) NOT NULL,
	D_NAME    VARCHAR2(255) NOT NULL
);

-- TABLESPACE 사용
CREATE TABLE TB_DEPT (
	D_CODE    VARCHAR2(20) NOT NULL,
	D_NAME    VARCHAR2(255) NOT NULL
) TABLESPACE "USERS" ;

 

2. 주키를 추가 / 제거 합니다.

 

ALTER TABLE TB_BOARD ADD CONSTRAINTS PK_TB_BOARD PRIMARY KEY (NUM);
ALTER TABLE TB_DEPT ADD CONSTRAINTS PK_TB_DEPT PRIMARY KEY (D_CODE);

-- TABLESPACE 지정
ALTER TABLE TB_DEPT 
  ADD CONSTRAINTS PK_TB_DEPT PRIMARY KEY (D_CODE) USING INDEX TABLESPACE "USERS"

ALTER TABLE TB_BOARD DROP CONSTRAINT PK_TB_BOARD;
ALTER TABLE TB_DEPT DROP CONSTRAINT PK_TB_DEPT;

 

3. 외래키를 추가/ 제거 합니다.

 

ALTER TABLE TB_BOARD 
	ADD CONSTRAINTS FK_BOARD_DEPT FOREIGN KEY (D_CODE) REFERENCES TB_DEPT(D_CODE);

ALTER TABLE TB_BOARD DROP CONSTRAINT FK_BOARD_DEPT;

 

4. 테이블 이름을 변경합니다. 테이블 이름을 변경하여도 주키와 외래키에 영향이 없습니다.

 

ALTER TABLE TB_DEPT RENAME TO TB_DEPARTMENT;

 

5. 컬럼을 추가합니다. 오라클은 컬럼의 추가 위치를 지정할 수 없습니다. 항상 맨 마지막에 추가 됩니다.

 

ALTER TABLE TB_BOARD ADD (CATEGORY_USE_AT CHAR(1) DEFAULT 'N' NOT NULL);
ALTER TABLE TB_BOARD ADD (CATEGORY_LIST VARCHAR2(1000));

 

6. 컬럼 정보를 수정합니다.

 

-- 컬럼 속성 변경하기
ALTER TABLE TB_BOARD MODIFY (CATEGORY_LIST VARCHAR2(2000));

-- 컬럼명 변경하기
ALTER TABLE TB_BOARD RENAME COLUMN CATEGORY_LIST TO CAT_LIST;

 

7. 컬럼을 사용하지 않음으로 설정합니다. 삭제 작업보다 빠르게 실행됩니다. 나중에 실제로 삭제할 수 있습니다. unused 는 되돌릴 수 없습니다.

 

ALTER TABLE TB_BOARD SET UNUSED (CATEGORY_LIST);

 

8. 컬럼을 삭제 합니다.

 

ALTER TABLE TB_BOARD DROP COLUMN CATEGORY_LIST;
ALTER TABLE TB_BOARD DROP COLUMN CATEGORY_USE_AT;

 

9. INDEX를 생성합니다.

 

-- UNIQUE 인덱스 생성
CREATE UNIQUE INDEX UIX_DEPT ON TB_BOARD(D_CODE ASC);

-- 일반 인덱스 생성
CREATE INDEX IX_DEPT ON TB_BOARD(D_CODE);

-- TABLESPACE 지정
CREATE INDEX IX_DEPT ON TB_BOARD(D_CODE) TABLESPACE "USERS";

 

10. 인덱스를 삭제 합니다.

 

DROP INDEX UIX_DEPT;
반응형