mSQL에서 지원하는 Create문은 테이블, Index을 생성하는데 사용된다.
사용형식테이블의 생성
일반적으로 테이블 스키마를 생성할 때 사용된다. 테이블 명과 필드명은 반드시 영문이어야 하며, -와 같은 문자를 이름 중간에 삽입할 수 없다.
CREATE TABLE table_name (
col_name col_type [ not null ]
[ , col_name col_type [ not null ] ]**
)
인덱스의 생성
인덱스는 Unique Index와 일반적인 Index를 생성할 수 있다. Unique Index는 레코드와 레코드를 구분해주는 필드에대해 적용되며, 일단 Unique Index를 생성한 필드에는 동일한 데이터를 입력할 수 없다.
CREATE [ UNIQUE ] INDEX index_name ON table_name (
field_name
[ , field_name ] **
)
데이터형
데이타형
설명
char (len)
문자열이나 8비트 데이터
text (len)
가변의 길이를 갖는 문자열(또는 8비트 데이터)로 여기서 지정하는 길이(len)은 데이터의 평균길이를 지정하는데 사용된다. 지정된 길이모다 긴 데이터는 데이터 테이블과 외부 overflow buffer로 분리된다. text 필드는 char 필드보다 느리며, Indexing에 사용될 수 없다. 또한 LIKE와 같은 정규식 연산자를 사용할 수 없으므로 사용하기전에 사용상의 잇점을 충분히 고려해야 한다.
int
부호있는 정수 값
real
십진수 또는 실수값의 과학적 표현
unit
부호없는 정수
date
31-Jan-1998과 같은 DD-Mon-YYYY 형식의 날자
time
HH:MM:SS 형식의 24시로 표현된 시간
money
소수점 이하 두자리의 고정 소수점.
사용예테이블의 생성
다음은 사원에대한 인적사항을 기록한 emp_details라는 테이블 스키마를 작성하는 예이다.
CREATE TABLE emp_details(
first_name char(15) not null,
last_name char(15) not null,
comment text(50),
dept char(20),
emp_id int
)
이 예는 first_name, last_name, comment, dept, emp_id, salary란 필드들을 갖는 emp_details란 테이블을 현재 데이터베이스에 생성한다. first_name와 last_name은 사원의 성과 이름이므로로 반드시 존재해야 한다. 따라서 not null 속성을 부여하였다.
인덱스의 생성
위의 예에서 보여진 테이블의 구조는 index를 만들 경우 상당한 잇점을 갖는다. emp_id가 종업원을 구분하는 유일한 값을 갖는다고 가정하자. 이러한 필드는 일반적으로 primary key로 정의된다. mSQL 2.0에서는 이전 버전에서 사용되던 primary key 속성을 지원하지 않지만 index에의해 동일한 결과를 만들 수 있다. 일반적으로 질의는 성과 이름의 조합을 이용해서 이루어 지며 따라서 한 필드 이상으로 구성되는 합성 indexing로 상당한 성능을 개선할 수 있다.
CREATE UNIQUE INDEX idx1 ON emp_details (emp_id)
CREATE INDEX idx2 ON emp_details (first_name, last_name)
이렇게 생성된 index는 where 문내에서 indexing된 필드를 사용한 질의가 dB엔진으로 전송될 때 자동적으로 사용된다. 따라서 사용자는 indexing을위해 query 내에 어떠한 특별한 값을 지정할 필요는 없다.
연습
다음과 같은 표의 스키마를 생성하라. 각 필드의 속성은 다음과 같다.
sid: 문자형. 8자리. 반드시 필요.
sname: 문자형. 12자리. 반드시 필요.
phone: 문자형. 15자리.
lid: 정수형. 반드시 필요.
class: 문자형. 20자리. 반드시 필요
lname: 문자형. 10자리.
pname: 문자형. 12자리.
descript: 텍스트. 20자리.
스키마를 생성한 후, 스키마를 보기위해서는 Unix 명령행에서 relshow 명령을 수행해야 한다. relshow 명령의 사용법은 앞절을 참고한다.