본문 바로가기

mysql

[MySQL] DDL(1) - 테이블 생성 CREATE TABLE

1. DDL 이란?

데이터 정의어(Data Definition Language)로 CREATE/ALTER/DROP/TRUNCATE 명령어를 사용하여 데이터베이스를 정의하는 언어입니다.

2. 테이블 생성 CREATE TABLE

가장 중요한 테이블 생성에 필요한 요소들을 하나하나 알아보겠습니다. (MySQL 기준)

2.1 Column 컬럼

테이블을 구성하는 기본 요소로 옵션에 따라 다양하게 설정 가능합니다.

2.1.1 옵션

종류 설명 예시
Column Name 컬럼 명 id
Data Type 데이터 타입 (INT, CHAR, DATETIME 등..) INT UNSIGNED
Not Null NULL 값 허용 여부 NOT NULL
Auto Increment 해당 필드 값 자동 증가 설정 여부 AUTO_INCREMENT
Default default 값 0
Comment 필드 설명 primary key

2.1.2 SQL 예시

id INT UNSIGNED auto_increment DEFAULT 0 NOT NULL COMMENT 'primary key'

2.2 Constraint 제약조건

테이블을 생성 시 설정 가능한 제약 조건으로 데이터 무결성 등을 위해 필요합니다.

2.2.1 Primary Key

테이블의 기본키로 Unique 해야 하며 NULL값일 수 없습니다. 일반적으로 AUTO_INCREMENT 로 설정합니다.

CONSTRAINT <조건명> PRIMARY KEY (<컬럼명>)
CONSTRAINT user_PK PRIMARY KEY (id)

2.2.2 Foreign Key

테이블의 외래 키로 다른 테이블과의 Relation을 설정해주며 다른 테이블의 기본키(PK)를 참조합니다.

CONSTRAINT <조건명> FOREIGN KEY (id) REFERENCES <DB명>.<테이블명>(<컬럼명>) ON DELETE CASCADE
CONSTRAINT user_FK FOREIGN KEY (id) REFERENCES test.`user`(id) ON DELETE CASCADE
On Delete / On Update 설정
부모 테이블의 수정/삭제 시 자식 테이블(참조하고 있는 테이블)에 대한 조치를 설정할 수 있습니다.
ON DELETE RESTRICT ON UPDATE CASCADE 로 설정하여 데이터의 무결성 유지 및 안정성을 확보할 수 있습니다.

- Cascade: 참조 데이터 자동 삭제
- Restrict: 참조 데이터가 있는 경우 수정/삭제가 불가, 참조 데이터 삭제 후 부모 데이터 삭제 가능 (No Action 과 동일)
- Set Null: 참조 데이터에 대한 FK 값을 Null 로 업데이트
- Set Default: default 로 설정한 값으로 업데이트

2.2.3 Unique Key

기본키 이외에 여러 개의 컬럼의 조합으로 Unique 해야 하는 경우 설정해줍니다.

UNIQUE KEY <조건명> (<컬럼1>,<컬럼2>)
UNIQUE KEY `user_UN` (`sid`,`provider`)

2.3 Index 설정

테이블 내에 데이터를 빠르게 조회하기 위해 필요한 설정입니다. 주 검색 조건이고 업데이트가 잦지 않으며 Unique 한 필드에 적용합니다. 

기본키(PK)와 Unique Key는 기본적으로 자동 index로 설정됩니다. (MySQL 기준)

CREATE INDEX <조건명> USING BTREE ON <DB명>.<테이블명> (<컬러명>);  -- BTREE 사용
CREATE INDEX user_token_IDX USING BTREE ON test.user (token);
인덱스가 사용되지 않는 경우
WHERE절에 첫 번째 컬럼 비교가 아닐 때, LIKE절에 와일드카드(*)로 비교할 때, WHERE절과 ORDER BY 컬럼이 다른 경우 등..
Tip. EXPLAIN 명령어를 통해 Index가 사용되고 있는지 확인할 수 있습니다.