오라클 테이블(TABLE) 이란? 생성 및 수정
8. 테이블(Table)
8.1 테이블(Table)이란?
테이블은 Schema Objects의 하나로 관계형 데이터베이스를 구성하는 기본 데이터 구조로서 행과 열의 구조를 가지며 이 테이블을 이용하여 데이터를 입력, 수정, 삭제, 추출 등을 하게된다.
Schema Object란? Schema는 Schema Objects의 모임이며 오라클에서 사용자를 스키마라고 부른다. 스키마 오브젝트에는 TABLES, INDEXES, VIEWS, SEQUENCES, SYNONYM, CLUSTERS, DATABASE LINK, PROCEDURES, FUNCTIONS, PACKAGE등이 해당 된다.
8.1.1 Create Table
테이블을 생성하기 위해서는 우선 Create Table 시스템 권한과 테이블스페이스에 대해 저장 공간을 사용할 권한 또는 Unlimited TableSpace 시스템 권한이 있어야 한다. 테이블 생성은 테이블에 대한 구조(칼럼 및 데이터타입, 제약조건)를 정의하고 저장공간을 할당하는 과정이다. 이 테이블을 생성하기 위해서는 DDL(Data Definition Language)명령중 하나인 Create Table 명령어를 사용한다.
[기본문법]
CREATE [GLOBAL TEMPORARY]TABLE [SCHEMA.]table_name
(
column1 datatype [ DEFAULT expr ][constrinats],
column2 datatype [ DEFAULT expr ][constrinats],
...
);
GLOBAL TEMPORARY : 임시테이블을 의미하며 구조는 모든 세션에서 볼 수 있지만 데이터는 임시테이블을 생성한 세션에서만 확인 가능하다.
SCHEMA : 오라클사용자 계정
table_name : 생성하고자 하는 테이블 이름
column1, column2 : 칼럼이름
datatype : 칼럼의 데이터 타입
DEFAULT expr : 칼럼에 값이 안들어 오는 경우 사용되는 칼럼의 기본값
constraints : 칼럼의 제약조건(NOT NULL등)
서브쿼리를 이용한 테이블 생성
Create Table에서 Sub Query를 이용하여 다른 테이블의 데이터, 구조를 기본으로 테이블을 생성할 수 있다. 서브쿼리는 Create Table에서 지정한 컬럼과 개수, 데이터 타입이 맞아야 하며 Create Table에서 칼럼명을 기술하지 않으면 서브쿼리에서 SELECT되는 칼럼명이 테이블의 칼럼명이 되고 서브쿼리 테이블의 무결정 제약조건 중 NOT NULL 제약조건만 복제되므로 Primary Key, Foreign Key 제약조건 등은 다시 생성해야 한다.
CREATE TABLE table [column,,,] AS Sub Query;
8.1.2 테이블 구조 변경
생성된 테이블의 구조를 변경하기 위해서는 DDL(Data Definition Language)명령인 ALTER TABLE 명령을 사용하며 주로 컬럼타입의 변경, 길이의 변경, 칼럼 추가, 칼럼 삭제 등과 같은 일을 한다.
칼럼 추가
[기본 형식]
ALTER TABLE table_name ADD (column_name data_type [DEFAULT expr]…
n 칼럼을 추가할 테이블에 이미 데이터가 들어 있다면 추가되는 칼럼은 not null 정의는 불가능하며 기존 행의 추가 칼럼은 NULL로 입력된다.
n 추가되는 칼럼은 테이블의 맨뒤 칼럼으로 추가되며 DEFAULT값은 지정 가능하다.
칼럼 변경
테이블에 존재하는 칼럼에 대해 칼럼 길이, 기본값 지정, 테이터타입에 대해 변경을 하는 것으로 아래와 같은 형식을 가진다.
[기본 형식]
ALTER TABLE table_name MODIFY (column_name data_type [DEFAULT expr]…)
n 구조를 변경 할 칼럼에 기존 데이터가 없다면 타입이나 크기의 변경이 자유롭다.
n 칼럼 길이 변경의 경우 기존 데이터가 있으면 기존데이터의 길이보다 크거나 같을 경우만 길이변경이 가능하다. (기존 데이터의 길이 미만으로 변경 불가능 하다.)
n 숫자타입은 정밀도(scale) 증가 가능하다.
n 기존 데이터가 있는 경우 타입에 대한 변경은 VARCHAR2, CHAR만 가능하다.
n 만약 DEFAULT값을 변경하는 경우라면 기존 데이터는 영향이 없으며 이후 입력되는 데이터부터 기본값이 지정된다.
SET UNUSED(column_name) : 대용량 테이블의 큰 사이즈 칼럼의 경우 당장 삭제 하기에는 시스템에 부담이 되어 미래에 삭제하기 위해 사용 안 한다고 표시하는 것으로 한번 UNUSED로 지정된 칼럼은 다시 사용한다고 되돌리기는 불가능하고 DESC 명령어로 칼럼이 나타나지 않으며 DML 사용시 해당 칼럼은 사용 불가능 하다.
DROP UNUSED COLUMN : SET UNUSED(칼럼) 로 지정된 칼럼을 삭제한다.
칼럼 삭제
[기본 형식]
ALTER TABLE table_name DROP COLUMN column_name
칼럼 이름 변경
[기본 형식]
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name
old_column_name : 이름을 바꾸고자 하는 칼럼
new_column_name : 새 이름
8.1.3 테이블 이름변경 및 삭제, 주석추가
[기본 형식]
RENAME old_table_name TO new_table_name
DROP TABLE [schema.]table_name [CASCADE CONSTRAINTS]
RENAME 명령어 : 테이블의 이름을 변경한다.
DROP TABLE명령어 : 테이블 정의 및 데이터 삭제
n 삭제되는 테이블은 반드시 사용자 계정에서 생성한 테이블이어야 하며 다른 스키마계정의 테이블이라면 DROP ANY TABLE시스템 권한이 있어야 삭제 가능하다.
n 데이터 딕셔너리로부터 테이블 정의가 삭제되며 테이블에 로우(ROW) 및 연관되어 생성된 인덱스, 트리거도 함께 삭제된다.
n 삭제되는 테이블과 연관된 스키마 오브젝트(뷰 및 PLSQL함수 및 프러시저등)는 삭제되지는 않지만 ‘INVALID’ 상태가 된다. 동의어의 경우 사용 시 오류가 발생된다.
n 만약 삭제되는 테이블의 주키(Primary Key) 또는 고유키(UNIQUE KEY)를 자식 테이블에서 참조하고 있다면 기본적으로 삭제 불가능하며 자식테이블을 먼저 삭제하거나 DROP TABLE 명령어 마지막에 CASCADE CONSTRAINTS 조건을 줘서 삭제해야 한다.
n 즉 CASCADE CONSTRINTS 옵션은 삭제하는 테이블의 기본키나 고유키를 참조하는 참조 무결성 제약조건을 동시에 삭제하는 경우에 사용된다.
n 삭제되는 테이블에 할당된 EXTENTS는 테이블스페이스에 반환되며 다른 오브젝트 생성시 사용할 수 있게 된다.
n 플래시백 옵션으로 DROP TABLE 후 복구가 가능하다.
Truncate 명령어
테이블의 정의는 그대로 두고 데이터(행, 로우)만 잘라낸다.
[기본 형식]
TRUNCATE TABLE [schema.]table_name
n 테이블의 모든 행, 물리적인 저장공간을 삭제하며 테이블과 관련된 Storage Parameter를 테이블을 처음 만들때로 초기화 한다.
n 테이블과 연관된 인덱스, 동의어, 뷰 등은 그대로 유지된다.
n 테이블의 테이터를 삭제하는 가장 빠른 방법이며 DDL이므로 RollBack 되지 않는다.
n 테이블을 삭제하고 다시 만드는것보다 효율적인 방법이다.
n 테이블이 Trunacate명령을 실행하는 유저로 생성되었거나 DROP ANY TABLE 시스템 권한을 가지고 있어야 한다.
n WHERE절을 이용하여 특정 로우만 삭제하는 것은 불가능 하며 해당 테이블에 DELETE명령과 관련하여 트리거가 생성되어 있더라도 트리거는 동작하지 않는다.
테이블, 칼럼에 주석 추가하기
[기본 형식]
COMMENT ON table_name IS comments
COMMENT ON COLUMN table_name.column_name IS comments
댓글 없음:
댓글 쓰기