[MySQL강의노트] 제4강 컬럼 및 테이블 제약 (Constraint)
테이블 관리
테이블 만들기
CREATE CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (
컬럼 정의,
...)
[테이블 옵션 지정]
테이블의 이름은 2강을 참조하여 식별자 이름을 지정하는 규칙에 따릅니다. MySQL은 테이블 이름과 동일한 파일명을 만들기 때문에 파일명에 적합한 이름을 사용해야 합니다. 3강의 컬럼 타입을 참고로 컬럼들을 정의합니다. 2강에서 설명한 바와 같이 테이블의 저장 타입이 MyISAM인 경우 테이블 정의 정보를 담는 .frm 파일과 테이블 데이터를 저장한 .MYD 파일, 그리고 테이블 인덱스 정보를 담고 있는 .MYI 파일이 만들어 집니다. InnoDB 타입인 경우는 tablespace에 1개의 데이터 정보와 2개의 로그 정보를 담는 파일이 만들어 집니다.
TEMPORARY를 지정하면 1회용 테이블로 만들어져서 현재 연결이 유지되는 동안만 사용이 가능합니다. 현재 연결을 종료하면 자동으로 삭제됩니다. IF NOT EXISTS 지정은 이미 동일한 이름의 테이블이 존재할 경우 에러없이 문장의 실행을 중지시킵니다. 배치처리를 위해 사용합니다.
제약(Contraint)
컬럼 제약
컬럼정의: 컬럼_타입 [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'string']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
[reference_definition]
NOT NULL
컬럼의 값으로 NULL을 입력할 수 없습니다. 이 제약이 지정된 컬럼은 반드시 유효한 값을 가져야 합니다.
PRIMARY KEY
컬럼은 반드시 NOT NULL로 지정되어야 하며, 중복 값을 가질 수 없습니다. 이 컬럼은 자동으로 인덱싱됩니다. 또한 테이블당 한 개의 PRIMARY KEY만을 정의할 수 있습니다. 하나 이상의 컬럼을 PRIMARY KEY로 지정하는 복합키를 만들 경우 컬럼 제약을 사용할 수 없고 테이블 제약을 사용하여 PRIMARY KEY를 지정해야 합니다.
UNIQUE
중복 값을 허용하지 않는 컬럼을 정의합니다. PRIMARY KEY와 달리 NULL을 허용합니다. 테이블당 여러 개의 UNIQUE를 허용합니다. 인덱싱이 이뤄집니다.
DEFAULT 'value'
컬럼의 디폴트 값을 지정합니다. INSERT시 컬럼에 값을 지정하지 않고 로우가 추가되면 디폴트 값이 자동으로 저장됩니다.
AUTO_INCREMENT
정수 타입의 컬럼에 지정할 수 있으며 컬럼에 NULL이나 0을 입력하면 자동으로 해당 컬럼의 가장 큰 값의 다음 값으로 증가합니다. 테이블 당 한 개의 제약만 사용할 수 있으며 인덱싱이 되어야 합니다.
REFERENCES
참조 키를 지정합니다.
테이블 제약
create_definition:
col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
[index_option] ...
| {INDEX | KEY} [index_name] [index_type] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,...)
[index_option] ...
| {FULLTEXT | SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) reference_definition
| CHECK (expr)
PRIMARY KEY(컬럼 목록)
컬럼 제약을 통해 기본키를 지정할 수 있지만 기본키외에 복합키를 지정할 때 사용합니다. 일반적으로 기본키 지정시에도 사용합니다.
INDEX(컬럼 목록), KEY(컬럼 목록)
인덱스 컬럼입니다. ASC나 DESC를 옵션으로 사용하여 오름차순이나 내림차순으로 지정할 수 있습니다.
UNIQUE(컬럼 목록)
컬럼 제약과 동일한 속성을 가집니다.
FULLTEXT
Full-text 인덱스를 지원합니다. MATCH()와 같은 전체 문장을 대상으로 한 Full-text 검색 함수의 사용시 함께 지정되어야 합니다.
FORIGN KEY
외래키의 지정시 사용합니다.
CHECK
InnoDB 테이블의 경우 외래 키 제약 조건에 대한 확인을 제공합니다. 대부분의 다른 저장 엔진들은 무시합니다.