테이블 생성
- 테이블을 구성하는 속성들의 이름과 데이터 타입과 제약 사항에 대한 정의,
기본키·대체키·외래키의 정의, 데이터 무결성을 위한 제약조건의 정의 등을 포함한다. - []로 표시한 함목은 생략 가능
- 대소문자를 구분하지 않는다.
기본 형식
- (1) 테이블을 구성하는 속성에 대하여 정의한다.
- 각 속성의 이름, 데이터 타입, 기본적인 제약 사항을 정의한다.
- (2) 기본 키를 나타낸다.
- 테이블에 하나만 존재할 수 있다.
- (3) 대체 키를 나타낸다.
- 테이블에 여러 개 존재할 수 있다.
- (4) 외래 키를 나타낸다.
- 테이블에 여러 개 존재할 수 있다.
- (5) 데이터 무결성을 위한 제약조건을 나타낸다.
- 테이블에 여러 개 존재할 수 있다.
속성 정의
- 현실 세계의 개체를 표현하기 위해 필요한 속성 목록에 대하여 작성한다.
- 각 속성에 알맞는 데이터 타입을 선택한다.
- 해당 속성에 NULL을 허용하고 싶지 않을 때는
NOT NULL
을 작성한다.- 예시 :
고객아이디 VARCHAR(30) NOT NULL
- 예시 :
- 해당 속성에 기본 값을 명시하고 싶을 때는
DEFAULT 기본_값
을 작성한다.- 숫자 데이터는 그대로 표현한다.
- 문자열이나 날짜 데이터는 작은 따옴표로 묶어주어야 한다.
- 작음 따옴표로 묶인 문자열은 대소문자를 구분한다.
- 예시 :
적립금 INT DEFAULT 0
기본 키 정의
PRIMARY KEY
키워드를 사용해 지정한다.- 예시 :
PRIMARY KEY (고객아이디)
- 예시 :
- 테이블마다 하나씩만 정의할 수 있다.
- 단일 또는 복수의 속성으로 구성된다.
- 예시 :
PRIMARY KEY (주문고객, 주문제품)
- 예시 :
- 기본 키가 없어도 테이블은 정의할 수 있지만 왠만하면 정의하는 것이 좋다.
대체 키 정의
UNIQUE
키워드를 사용해 지정한다.- 예시 :
PRIMARY KEY (연락처)
- 예시 :
- 하나의 테이블에 여러 개 존재할 수 있다.
외래 키 정의
FOREIGN KEY
키워드를 사용해 지정한다.REFERENCES
를 통해 어떤 테이블의 어떤 속성을 참조할지 지정한다.- 하나의 테이블에 여러 개 존재할 수 있다.
ON DELETE
키워드를 통해 참조되는 테이블에서 투플의 값이 변경된 경우에 대한 처리를 지정한다.- ON DELETE NO ACTION
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플을 삭제하지 못하게 함
- 기본 값
- ON DELETE CASCADE
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플을 함께 삭제함
- ON DELETE SET NULL
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플의 값을 NULL로 초기화함
- ON DELETE SET DEFAULT
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플의 값을 기본 값으로 초기화함
- ON DELETE NO ACTION
ON UPDATE
키워드를 통해 참조되는 테이블에서 투플이 삭제된 경우에 대한 처리를 지정한다.- ON UPDATE NO ACTION
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플을 갱신하지 못하게 함
- 기본 값
- ON UPDATE CASCADE
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플을 함께 갱신함
- ON UPDATE SET NULL
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플의 값을 NULL로 초기화함
- ON UPDATE SET DEFAULT
- 참조하는 테이블이 있는 경우 참조되는 테이블의 투플의 값을 기본 값으로 초기화함
- ON UPDATE NO ACTION
제약조건 정의
CHECK
키워드를 통해 특정 속성에 대한 제약조건을 지정할 수 있다.- 예시 :
CHECK(결제금액 >= 0)
- 예시 :
CONSTRAINT
키워드와 함께 사용하여 고유한 제약조건의 이름을 부여할 수도 있다.- 예시 :
CONSTRAINT 결제금액조건 CHECK(결제금액 >= 0)
- 예시 :
- 하나의 테이블에 여러 개 존재할 수 있다.
속성의 데이터 타입
유형 | 데이터 타입 | 바이트 수 | 설명 |
---|---|---|---|
정수 | TINYINT | 1 | -128 ~ 127 사이의 정수 |
SMALLINT | 2 | -32,768 ~ 32,767 사이의 정수 | |
MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 사이의 정수 | |
INT | 4 | 약 -21억 ~ +21억 사이의 정수 | |
BIGINT | 8 | 약 -900경 ~ +900경 사이의 정수 | |
BIT | N/8 | 1 ~ 64bit를 표현한다. b'0000' 과 같이 표현한다. | |
실수 | FLOAT | 4 | -3.40E+38 ~ -1.17E-38 사이의 실수 소수점 아래 7자리까지 표현한다. |
DOUBLE | 8 | 1.22E-308 ~ 1.79E+308 소수점 아래 15자리까지 표현한다. | |
DEMICAL | 5 ~ 17 | 전체 자리 수와 소수점 이하 자리수를 표현한다. 범위 : -1038+1 ~ +1038-1 예시 : DEMICAL(5, 2) => 673.21 | |
텍스트 | VARCHAR | 1 ~ 65535 | 가변 길이 문자형 사용하는 만큼의 공간만 차지한다. |
CHAR | 1 ~ 255 | 고정길이 문자형 사용하는 만큼이 아닌 정의한 만큼의 공간을 차지한다. VARCHAR보다 성능이 좋다. | |
TINTTEXT | 1 ~ 255 | 255 크기의 TEXT 데이터 값 | |
TEXT | 1 ~ 65,535 | N 크기의 TEXT 데이터 값 | |
MEDIUMTEXT | 1 ~ 16,777,215 | 16,777,215 크기의 TEXT 데이터 값 | |
LONGTEXT | 1 ~ 4,294,967,295 | 최대 4GB 크기의 TEXT 데이터 값 | |
바이너리 | BINARY | 1 ~ 255 | 고정길이 이진 데이터 값 |
VARBINARY | 1 ~ 255 | 가변길이 이진 데이터 값 | |
TINYBLOB | 1 ~ 255 | 255 크기의 BLOB 데이터 값 | |
BLOB | 1 ~ 65,535 | N 크기의 BLOB 데이터 값 | |
MEDIUMBLOB | 1 ~ 16,777,215 | 16,777,215 크기의 BLOB 데이터 값 | |
LONGBLOB | 1 ~ 4,294,967,295 | 최대 4GB 크기의 BLOB 데이터 값 | |
시간 | DATE | 3 | 'YYYY-MM-DD' 형식 범위 : 1001-01-01 ~ 9999-12-31 |
TIME | 3 | 'HH:MM:SS' 형식 범위 : -838:59:59.000000 ~ 838:59:59.000000 | |
YEAR | 1 | 'YYYY' 형식 범위 : 1901 ~ 2155 | |
DATETIME | 8 | 'YYYY-MM-DD HH:MM:SS 형식 범위 : 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 | |
TIMESTAMP | 4 | 'YYYY-MM-DD HH:MM:SS 형식 범위 : 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 time_zone 시스템 변수와 관련이 있다. UTC 시간대로 변환하여 저장한다. |
숫자 데이터 형식
- 사용하는 자료형의 종류에 따라 값을 저장하는 방식이 다르다.
- DECIMAL은 정확한 수치를 저장한다.
- FLOAT는 근사치 값을 저장한다.
- 부호없는 숫자를 저장할 때에는 UNSIGNED 예약어를 같이 사용한다.
- 음수 영역이 사용하는 영역을 양수 영역이 추가로 사용할 수 있다.
문자 데이터 형식
- VARCHAR은 UTF-8의 형태를 지니므로 입력한 글자의 언어에 따라 내부적으로 크기가 달라진다.
- CHAR는 언어에 관계 없이 지정한 크기의 글자 수를 입력할 수 있다.
- BLOB(Binary Large Object)은 대용량 이진 데이터를 저장하는데 사용하는 자료형이다.
- 예시 : 사진, 동영상, 문서 파일 등