// 스터디노트
관계형데이터베이스인 MySQL은
Table - 표 구조를 기본으로 한 데이터 구조를 갖는다
흔히 쉽게 접할 수 있는
'엑셀' 프로그램에 비유되고는 하는데
행과 열에 각각의 기준을 부여하고,
Cell에 입력된 개별 데이터를
분류/재편집 하는 과정을 쿼리문이 담당하게 된다
(필터와 정렬의 기능과 비슷하다)
예시 ) table : user
user_num |
name |
age |
sex | purchase |
1054 |
김철수 |
26 |
남 | 105000 |
1055 |
박미영 |
34 |
여 | 86000 |
1056 |
이미자 |
21 |
여 | 354500 |
엑셀에서는 데이터를 입력하고
표시형식 설정을 통해 데이터 형식을 지정하고 있다 (후처리)
하지만 MySQL 에서는
반대로 데이터 형식(타입)을 먼저 설정한 후 (선처리)
개별 데이터를 입력하는 방식으로 진행된다
** 데이터형식을 정하는 일련의 행위 및 종류를 schema (스키마) 라고 한다
테이블의 데이터 레이아웃 만들기
명령어를 통해 'user' 라는 테이블 만드는데,
분류하고자 하는 항목과
그에 따른 데이터 형식(스키마)를 먼저 설정해준다
** TIP >> 테이블명, 변수명 등은 '(작은따옴표) 가 아닌 `(악센트, ~위치) 로 감싸주어야한다
스키마의 종류는
1) 문자의 길이
2) 숫자의 길이
3) 날짜시간형식
4) 기타
로 나누어 볼 수 있다.
분류 |
타입명 |
상세 |
문자형식 |
TINYTEXT |
최대 255 문자길이 |
TEXT |
최대 65535 문자길이 |
|
BLOB |
최대 65535 문자길이 |
|
MEDIUMTEXT |
최대 16777215 문자길이 |
|
MEDIUMBLOB |
최대 16777215 문자길이 |
|
LONGTEXT |
최대 4294967295 문자길이 |
|
LONGBLOB |
최대 4294967295 문자길이 |
|
고정값을 지니거나, 지닐 수 있는 문자형식 |
CHAR( ) |
0 to 255 고정문자 길이 |
VARCHAR( ) |
0~65535 가변 문자 길이 |
|
숫자형식 | TINYINT( ) | -128 ~ 127 / (unsigned) 0 ~ 255 정수 |
SMALLINT( ) | -32768 ~ 32767 / 0 ~ 65535 정수 | |
MEDIUMINT( ) | -8388608 ~ 8388607 / 0 ~ 16777215 정수 | |
INT( ) | -2147483648 ~ 2147483647 / | |
BIGINT( ) | -9223372036854775808 ~ 9223372036854775807 / 0 ~ 18446744073709551615 정수 | |
부동 소수점 데이터 형식 | FLOAT() | 0~23 사이의 소수 자리값 (4bit) |
DOUBLE(M,D) / REAL (M,D) | M = 전체 자리수 D = 소수 이하 자리수 (8bit) | |
고정 소수점 테이터 형식 | DECIMAL(M,D) | 고정 소수점 |
날짜시간 형식 | DATE | YYYY-MM-DD |
DATETIME | YYYY-MM-DD HH:MM:SS | |
TIMESTAMP(M) | YYYYMMDDHHMMSS | |
TIME | HH:MM:SS | |
YEAR( ) | 2/4 값을 통해 연도 형식을 표시할 수 있음 | |
기타 | ENUM (' ', ' ', ... ) | 지정된 값 또는 NULL 만 저장 |
SET (' ', ' ', ... ) | 하나 이상의 값 또는 NULL 저장 |
이 외에도 추가 형식이 있지만, 주요하게 쓰이는 것들은 대부분 위 표에 속해 있다
궁금증 1) TEXT vs BLOB
최대값을 지정하는 문자형식중
TEXT 와 BLOB 가 같은 상세설명을 갖고 있는걸 알아차렸으려나?
그렇다면 왜 이 둘을 나누어 놓았을까?
데이터형식을 '문자형식' 이라고 구분지어두었으나
사실 '문자' 로 대변되는 데이터는 '숫자' 이외의 데이터들을 일컫고 있다.
때문에 실제로 글자인 데이터 타입은 TEXT로,
( TEXT : non-binary string - character set )
이외의 데이터 타입은 BLOB로 저장한다.
( BLOB : binarty string - collation ; byte형 숫자값으로 비교 정렬됨 )
- BLOB 의 장단점
1) 장점 : 다양한 형식의 파일을 저장할 수 있다
2) 단점 : 내용 검색이 불가하다
좀 더 자세히 알아보고 싶다면?
MySQL 공식사이트 ::
11.4.3 The BLOB and TEXT Types
궁금증 2) CHAR vs VACHAR
고정값을 지닐 수 있는
CHA 와 VACHA의 가장 큰 차이점은
CHA는 고정값 지정시 고정값보다 작은 데이터를 입력하더라도 고정값 만큼 자리를 차지하며
VACHA는 고정값보다 작은 데이터를 입력할 경우, 입력한 데이터만큼의 값을 갖는다
때문에 데이터가 차지하는 용량을 고려한다면 VACHA가 유리하지만
CHA는 고정문자의 특성으로 효율적 검색이 가능하다
궁금증 3) TEXT/BLOB vs CHAR/VACHAR
- T/B 에서는 index의 prefix 길이를 설정해야한다 (C/V는 옵션 개념)
- T/B 는 default 값을 가질 수 없다 (but GROUP BY, ORDER BY 등의 명령어를 더해 고정 가능하다)
- T/B 의 값은 길게 사용이 가능하기 때문에 제약사항이 있다.
- C/V의 장점
크기가 작아 index를 활용한 검색에 용이하다
궁금증 4) 고정소수점 vs 부동소수점
컴퓨터에서 실수를 표시하는 방법으로
소수점의 위치의 고정여부에 따라 고정소수점 / 부동소수점으로 나뉜다
부동소수점의 경우 가수와 지수를 활용하여 실수를 표시한다.
- 10bit 로 표현하기
고정소수점 => 0~1024까지 표현 가능 (고정)
소수점이 고정되어 있어 표현의 범위를 크게 벗어날 수 없음
부동소수점 =>
할당량의 일부는 자리수를, 일부는 숫자를 표현하여
더욱 다양한 표현이 가능해짐
+ 값이 커질 수록 미세한 정보가 누락되지만, 값이 작아질 수록 작은 정보까지 처리 가능함
예)
0.0000001 (고정 소수점)
8*8=64bit
0.1*10^(-6) (부동 소수점)
16bit+16bit=32bit
'Develop' 카테고리의 다른 글
초보를 위한 python의 실행, window powershell (2) | 2017.10.11 |
---|---|
설치해보자 Python (0) | 2017.08.30 |
설치해보자 MySQL (0) | 2017.08.14 |
데이터베이스란? (0) | 2017.08.14 |
설치해보자 node.js (0) | 2017.08.11 |