[Oracle] 오라클 테이블 생성하기
Oracle

[Oracle] 오라클 테이블 생성하기

오라클에서 테이블이란

테이블은 오라클 DB에서 가장 중요한 객체로서 사용자가 관리하고자 하는 실 데이터가 저장되어 있는 곳이다. 

 

테이블 생성을 위한 기본 Syntax는,

CREATE TABLE [스키마].테이블명
( 컬럼명 데이터타입 [DEFAULT 값 | 제약조건][,...] );

이때, CREATE TABLE 뒤에는 스키마(SCHEMA)를 지정하거나 생략하고 테이블명을 지정할 수 있다. 

 

테이블 명과 DB 객체 이름을 저장할 때 Rule

1) 테이블/컬럼명은 문자로 시작하고(숫자X) 길이는 30문자 이내로 설정

2) 테이블/컬럼명은 A~Z, a~z, 0~9을 사용할 수 있고, 한글 사용도 가능하지만 권장하지 않는다.

3) 동일한 스키마 내에서는 다른 객체와 이름이 중복괴면 식별이 안되기 때문에 중복되지 않도록 이름을 지정해야한다. 단, 스키마가 다른경우 스키마를 통한 구별이 가능하기 떄문에 객체 이름의 중복이 가능하다. 

4) 오라클 DB가 예약어로 사용하는 이름은 사용이 불가능하며 대소문자는 구별하지 않는다.

5) 소문자로 테이블 명을 지정해도 데이터 사전에는 자동으로 대문자로 저장이 된다. 따라서 테이블 명을 검색할 경우에는 반드시 대문자로 지정해야한다.

 

오라클에서 스키마란?

스키마는 사용자가 DB에 접근하여 생성한 객체들의 대표 이름을 의미한다. 기본적으로 사용자의 계정명과 동일하게 부여된다. 생성한 객체(테이블, 뷰 등등)들의 소유는 생성한 계정이 가지기 떄문에 다른 스키마는 접근이 불가능하다. 스키마를 이용하여 생성한 객체들의 소유자가 누구인지를 알려줄 수 있다. 스키마 소유자가 다른 소유자에게 스키마 접근 권한을 부여하면 다른 사용자도 스키마에 접근 할 수 있다. 다른 사용자의 객체를 접근할 때는 스키마를 지정하여 '스키마.객체' 형식으로 사용해야 된다. 

 

존재하는 테이블을 사용하여 새로운 테이블을 만드는 씨탁스(CTAS) 기법

CTAS 기본 Syntax,

CREATE TABLE 테이블명 [(컬럼명, 컬럼명2)]
AS 
SUBQUERY;

서브쿼리에서 WHERE 절을 이용하여 조건을 지정할 수 있는데, 만약 조건이 FALSE 이면 검색된 데이터가 없기 때문에 서브쿼에서 사용한 테이블의 구조만 복사된다. 반대로 조건이 TRUE 이거나 WHERE 절을 생략하면 서브쿼리가 실행된 데이터까지 포함되어 새로운 테이블이 생성된다. 

 

CTAS 예제로 기존에 있는 dept 테이블의 구조만 복사한 새로운 mydept 테이블을 만드는 방법이다.

CREATE TABLE mydept
AS
SELECT * FROM dept
WHERE 1=2;

단, CTAS는 테이블을 생성할 때 NOT NULL 제약조건을 제외한 제약조건은 복사되지 않는다.